Core Data持久存储异步保存

时间:2014-05-04 08:46:55

标签: ios multithreading core-data nsmanagedobject

我需要将更改从临时上下文保存到磁盘,而不会阻止主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.'

我做错了什么?

1 个答案:

答案 0 :(得分:1)

错误消息非常具有描述性。您正在尝试将父上下文分配给已具有持久性存储协调器的上下文。你不能两者都做。托管对象上下文可能 持久性商店协调员父上下文但不能同时。对于嵌套上下文,只有根上下文具有自己的持久存储协调器。它的子语境(以及它们的子语境等)也有父语境。

如果要创建父上下文,请不要为持久性存储协调器分配值。

如果要为持久性存储协调器分配值,请不要设置其父上下文。