Use MagicalRecord con otro context existente en RestKit

Quiero seguir usando mi RestKit actual mientras uso MagicRecord para el rest de búsquedas y actualizaciones. Quiero que MOC de Restkit envíe actualizaciones al context pnetworkingeterminado de MagicRecord. Si entiendo bien, esto es lo que estoy haciendo. ¿Esta bien?

NSManagedObjectContext* context = [[RKObjectManager shanetworkingManager].objectStore managedObjectContextForCurrentThread]; [MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:[XDBStore storeName]]; [context setParentContext:[NSManagedObjectContext MR_defaultContext]]; 

Quizás otra forma de hacerlo, pero aún no estoy seguro.

 NSPersistentStoreCoordinator *coordinator = [[[RKObjectManager shanetworkingManager] objectStore] persistentStoreCoordinator]; [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; 

¿Alguien tuvo el mismo problema antes?

EDIT 1

Probé la sugerencia @ 1 de la casademora para establecer el context pnetworkingeterminado, pero obtuve este error.

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can only use -performBlockAndWait: on an NSManagedObjectContext that was created with a queue.' 

EDIT 2

Encontré un truco. Primero, abre el setter para el context pnetworkingeterminado en magicalrecord. A continuación, cambie el tipo de concurrency para la tienda RestKit para que su context se pueda usar en magicalrecord.

NSManagedObjectContext + MagicalRecord.h

 + (void) MR_setDefaultContext:(NSManagedObjectContext *)moc; + (void) MR_setRootSavingContext:(NSManagedObjectContext *)context; 

RKManagedObjectStore.m

 NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 

Luego configure MagicalRecord así:

 NSManagedObjectContext* context = [[RKObjectManager shanetworkingManager].objectStore managedObjectContextForCurrentThread]; [NSManagedObjectContext MR_setRootSavingContext:context]; NSManagedObjectContext *defaultContext = [NSManagedObjectContext MR_newMainQueueContext]; [defaultContext setParentContext:context]; [NSManagedObjectContext MR_setDefaultContext:defaultContext]; 

Hay un proyecto de ejemplo disponible que muestra cómo usar RestKit con MagicalRecord @ https://github.com/blakewatters/RKMagicalRecord

Para resumir la solución de Blake

Use una extensión de class para exponer el acceso a los methods privados de configuration de MagicalRecord.

 @interface NSManagedObjectContext () + (void)MR_setRootSavingContext:(NSManagedObjectContext *)context; + (void)MR_setDefaultContext:(NSManagedObjectContext *)moc; @end 

Primero haga la configuration de datos centrales, luego esto

 [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:managedObjectStore.persistentStoreCoordinator]; [NSManagedObjectContext MR_setRootSavingContext:managedObjectStore.persistentStoreManagedObjectContext]; [NSManagedObjectContext MR_setDefaultContext:managedObjectStore.mainQueueManagedObjectContext]; 

Hay dos forms de lograr esto:

1) Obtenga el context principal de RestKit, y configúrelo como el context pnetworkingeterminado:

 NSManagedObjectContext *rkContext = ...; //You'll have to figure this part out [NSManagedObjectContext MR_setDefaultContext:rkContext]; 

2) Por cada búsqueda que hagas, solo especifica el context:

 NSMangedObjectContext *rkContext = ...; //again, I don't know where to get this in restkit [MyEntity MR_findAllInContext:rkContext]; // <- This will use the RestKit context