对NSConfinementConcurrencyType上下文的澄清作为父上下文的子级

时间:2014-01-13 18:02:55

标签: objective-c core-data nsmanagedobjectcontext

在阅读有关NSConfinementConcurrencyType的文档时,我阅读了以下内容

  

您不能将此并发类型与新结合使用   嵌套上下文功能

这句话对我来说很奇怪,因为我可以做,例如,在NSOperation子类中,如

NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[localMOC setParentContext:[self mainContext]];

其中mainContext可以从外部注入,类型为NSMainQueueConcurrencyType

我错过了什么吗?

2 个答案:

答案 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]

就可以正常工作 队列并发类型。