我想繼續使用我當前的RestKit,同時使用MagicRecord獲取其餘的提取和更新。我希望Restkit的MOC發送更新到MagicRecord的默認上下文。如果我理解正確,這就是我正在做的。這個可以嗎?在RestKit中使用MagicalRecord與另一個現有上下文
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.'
EDIT 2
我發現一個黑客。首先,在magicalrecord中打開默認上下文的setter。接下來,更改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];
怎麼樣我上面所用的方法是什麼?分享協調員? – angelokh 2012-07-20 01:38:53
BTW,MR_setDefaultContext是私有方法。 – angelokh 2012-07-20 01:41:42
我試過第一個(設置默認上下文),但得到這個錯誤。 ***終止應用程序,由於未捕獲異常'NSInvalidArgumentException',原因:'只能在使用隊列創建的NSManagedObjectContext上使用-performBlockAndWait:'。 – angelokh 2012-07-20 01:50:10