根据您的问题,您不需要拥有多个上下文,然后与主上下文共享它们的更改。仅使用您在不同控制器之间共享的主上下文。通常这是可以的。
这里有两种方法是有效的。
第一种方法意味着您可以在控制器之间传递上下文作为一种“代码注入”。
controller1.masterContext = [self masterContext];
masterContext
的strong
属性在哪里controller1
。
第二种方法意味着在您设置核心数据堆栈(通常是应用程序委托)的类中,您提供一个readonly property
可以访问上下文的方法。您还可以提供一种save
方法来保存上下文。我不太喜欢将所有设置代码放在应用程序委托中,因此,我通常为此创建一个单例类。DCTCoreDataStack就是一个例子。
@MarcusZarra 在IOS上传递 NSMANAGEDOBJECTCONTEXT中还展示了一些传递上下文的技术。
如果有兴趣,您还可以在 Core Data 中使用新的 iOS 5 API,并设置一个在私有队列 ( NSPrivateQueueConcurrencyType
) 中工作的主上下文和一个在主线程 ( NSMainQueueConcurrencyType
) 上工作的子上下文。这称为父/子上下文。在主线程中完成的更改将传递给将更改保存在 CD 存储中的主线程。这里有一些注意事项。核心数据发行说明。此外,请查看Multi-Context CoreData以获得完整的解释。