我需要将更改从临时上下文保存到磁盘,而不会阻止主UI线程。 我试图像文章multi-context-coredata
一样提到这一点执行以下操作:
NSManagedObjectContext *editContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
editContext.persistentStoreCoordinator = [NSManagedObjectContext defaultContext].persistentStoreCoordinator;
[NSManagedObjectContext defaultContext].parentContext = editContext;//defaultContext is my main CoreData context
但是应用程序在字符串上崩溃了:
[NSManagedObjectContext defaultContext].parentContext = editContext
以下内容:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Context already has a coordinator; cannot replace.'
我做错了什么?
答案 0 :(得分:1)
错误消息非常具有描述性。您正在尝试将父上下文分配给已具有持久性存储协调器的上下文。你不能两者都做。托管对象上下文可能 持久性商店协调员或父上下文但不能同时。对于嵌套上下文,只有根上下文具有自己的持久存储协调器。它的子语境(以及它们的子语境等)也有父语境。
如果要创建父上下文,请不要为持久性存储协调器分配值。
如果要为持久性存储协调器分配值,请不要设置其父上下文。