我对如何在主线程之外的其他线程上创建MOC
感到困惑。
一方面,在the doc中,可以阅读
这样做的结果是上下文假设默认所有者是 分配它的线程或队列 - 这由线程决定 调用它的init方法。因此,您不应该初始化a 一个线程上的上下文然后将它传递给另一个线程。
但另一方面,我看到代码中的辅助MOC
按以下方式创建,主线程上的:
NSManagedObjectContext *parentContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[parentContext performBlockAndWait:^{
[parentContext setUndoManager:nil]; // no point in it supporting undo
[parentContext setPersistentStoreCoordinator:coordinator];
}];
那么,创建辅助MOC
的好方法是什么?也许我应该确切地知道这个辅助MOC
是项目中心类的@property
(例如AppDelegate
)。
答案 0 :(得分:3)
文档充其量是模棱两可的。
在我的测试中,您无需使用队列将NSManagedObjectContext
附加到其父级或NSPersistentStoreCoordinator
。
如果您正在执行NSConfinmentConcurrencyType
我在创建它的线程上设置父或协调器(因为那是可以使用它的线程)。
如果你正在做NSPrivateQueueConcurrencyType
我也在创建它的线程上设置父或协调器。限制或限制为私有队列的NSManagedObjectContext
的用法。我将用法定义为执行提取,删除对象等。配置NSManagedObjectContext
不受限制。
这当然不在文档中,但结果是在访问NSManagedObjectContext
时错误地导致异常时通过测试产生的。