在使用NSOperations的多线程应用程序中使用CoreData时遇到了一些麻烦。我通过MagicalRecord(2.0.3)使用嵌套的ManagedObjectContexts,如下所示:
Root Context (saves to disk)
|
Main Thread Context (for populating the UI)
|
Sub-Context(s) (used to add/edit/remove data)
我有一个NSOperationQueue来处理所有数据处理。
在大多数情况下,事情正常,我可以异步下载数据,然后将其提供给NSOperation,然后将其写入其中一个子上下文。在操作结束时保存将更改推送到主上下文和UI更新。太好了!
问题在于,如果子上下文删除实体并保存(将其推送到主上下文),则兄弟子上下文仍将认为它存在。那么,如果一个兄弟试图对实体进行故障并将其从它的父节点(主要上下文)中拉出来,我就会崩溃。
我有两个问题:
我很感激任何建议。感谢。
答案 0 :(得分:1)
您可以而且应该拥有多个子上下文。但是,我不确定上下文的经典“线程隔离模式”是否应该是您应该拥有的模型。当你说上下文属于某个特定线程时,这就是你正在做的事情。 MagicalRecord 2.0x现在使用私有队列上下文,因此会有不同的表现。没有规则说兄弟情境需要保持同步。你必须自己做。一个非常简单的解决方案是在您正在保存的上下文中侦听“已保存”通知,并重置或在另一个线程上创建新上下文。您可以使用MagicalRecord提供的通知或完成黑色来执行此操作。
希望这有帮助