在阅读有关NSConfinementConcurrencyType
的文档时,我阅读了以下内容
您不能将此并发类型与新结合使用 嵌套上下文功能
这句话对我来说很奇怪,因为我可以做,例如,在NSOperation
子类中,如
NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[localMOC setParentContext:[self mainContext]];
其中mainContext
可以从外部注入,类型为NSMainQueueConcurrencyType
。
我错过了什么吗?
答案 0 :(得分:2)
是的,该文档表现不佳。
我认为意味着你不能使用:
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
[moc setParentContext:[self managedObjectContext]];
我之前测试过,但确实因错误而失败。 YMMV当然是我在iOS 5.x中测试的。
不同于:
NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[localMOC setParentContext:[self mainContext]];
哪种方法很好,并且是较新核心数据设计的一部分。
两个初始值设定项之间存在细微差别,较旧的历史初始值设定项缺少一些关键组件,以允许父子上下文正常工作。
答案 1 :(得分:1)
NSConfinementConcurrencyType
您不能将此并发类型与新结合使用 嵌套上下文功能
适用于父上下文,而不适用于子上下文。所以
NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[localMOC setParentContext:[self mainContext]];
只要使用main或private创建[self mainContext]
,就可以正常工作 队列并发类型。