在阅读有关NSConfinementConcurrencyType的文档时,我阅读了以下内容
不能将此并发类型与新的嵌套上下文功能结合使用。
这句话对我来说很奇怪,因为我可以这样做,例如,在NSOperation子类中,例如
NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[localMOC setParentContext:[self mainContext]];mainContext可以从外部注入,并且是NSMainQueueConcurrencyType类型的。
我是不是遗漏了什么?
发布于 2014-01-13 18:11:11
是的,该文档的格式很差,的措辞也很差。
我认为它的意思是你不能使用:
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
[moc setParentContext:[self managedObjectContext]];我以前已经测试过了,但它确实失败了,有一个错误。当然,当我在iOS 5.x中测试它时,YMMV。
这与以下不同:
NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[localMOC setParentContext:[self mainContext]];它工作得很好,是更新的核心数据设计的一部分。
这两个初始化器与旧的、具有历史意义的初始化器之间有一个细微的区别,即缺少一些关键组件,以使父-子上下文能够正常工作。
发布于 2014-01-13 18:32:56
我可能错了,但根据一项简短的测试,我认为对NSConfinementConcurrencyType的限制
不能将此并发类型与新的嵌套上下文功能结合使用。
应用于父上下文,而不应用于子上下文。所以
NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[localMOC setParentContext:[self mainContext]];工作,只要[self mainContext]是用主队列或私有队列并发类型创建的。
https://stackoverflow.com/questions/21098211
复制相似问题