我想继续使用当前的RestKit,而将MagicRecord用于其余的提取和更新。我希望Restkit的MOC将更新发送到MagicRecord的默认上下文。如果我理解正确,这就是我正在做的事情。这个可以吗?
NSManagedObjectContext* context = [[RKObjectManager sharedManager].objectStore managedObjectContextForCurrentThread];
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:[XDBStore storeName]];
[context setParentContext:[NSManagedObjectContext MR_defaultContext]];
也许是另一种方式,但仍不确定。
NSPersistentStoreCoordinator *coordinator = [[[RKObjectManager sharedManager] objectStore] persistentStoreCoordinator];
[NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator];
[NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator];
有人遇到过同样的问题吗?
编辑1
我尝试了@casademora的建议1来设置默认上下文,但是遇到了此错误。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can only use -performBlockAndWait: on an NSManagedObjectContext that was created with a queue.'
编辑2
我发现了一个骇客。首先,在magicalrecord中为默认上下文打开设置器。接下来,更改RestKit存储的并发类型,以便可以在magicalrecord中使用其上下文。
NSManagedObjectContext + MagicalRecord.h
+ (void) MR_setDefaultContext:(NSManagedObjectContext *)moc;
+ (void) MR_setRootSavingContext:(NSManagedObjectContext *)context;
RKManagedObjectStore.m
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
然后像这样设置MagicalRecord:
NSManagedObjectContext* context = [[RKObjectManager sharedManager].objectStore managedObjectContextForCurrentThread];
[NSManagedObjectContext MR_setRootSavingContext:context];
NSManagedObjectContext *defaultContext = [NSManagedObjectContext MR_newMainQueueContext];
[defaultContext setParentContext:context];
[NSManagedObjectContext MR_setDefaultContext:defaultContext];
最佳答案
有一个可用的示例项目,展示了如何将RestKit与MagicalRecord @ https://github.com/blakewatters/RKMagicalRecord一起使用
关于objective-c - 将MagicalRecord与RestKit中的另一个现有上下文一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11571488/