关于以下场景,我对孩子MOC(NSPrivateQueueConcurrencyType
)如何与父MOC(NSMainQueueConcurrencyType
)合作感到困惑。我需要有一个后台线程检查Web服务器以获取新的或更新的数据。收到某些内容后,我需要保存或更新父MOC。听起来很简单,我看到了各种各样的例子。但是,我仍然对一些事情感到困惑。
在后台线程中处理数据时,我可以轻松地将对象保存在子MOC中。但是,在我的数据模型中,我按照建议设置了关系。因此,例如,ConversationThread将包含一个Messages数组。每条Message都会在关系中设置Message.parentConvoThread。所以,每当我从服务器收到新消息时......
现在,请说我正在为撰写邮件的人获取更新的个人信息。我看到他们已经更新了服务器上的数据,所以我需要在应用程序中更新他们的数据。在privateMOC ......
最后,关于搜索的几个问题......
我对他们如何一起工作很困惑。非常感谢任何帮助。
答案 0 :(得分:2)
NSManagedObjectContexts位于来自NSPersistentStore的数据的内存缓存中。子上下文的提取将通过NSPersistentStore上的父上下文执行,并且来自对象的数据将从子上下文中的高速缓存,父上下文或从持久性存储中的所有方式检索(无论何处它可以先找到数据。)
如果从子上下文中获取,将通过父上下文检索结果,并且您可以期望此获取请求返回对象,就像从父上下文中获取一样。
转到另一个方向,只要您保存了对子上下文所做的所有更改,这些更改将反映在父上下文中,因为核心数据会自动处理从子级到父级的合并。
唯一的技巧是,如果您在子上下文中引用了对象,并且更改在后台保存到父上下文,您将需要在子上下文中重新获取这些对象以从父上下文中获取更改,或者您可以手动合并父项NSManagedObjectContextDidSaveNotification
上的更改。有关详情,请参阅此帖子:How to keep a child NSManagedObjectContext up to date when using bindings。