我的应用会定期请求我将Core Data
持久存储的对象更新到网络服务。然后我需要更新我在主上下文中的对象(默认情况下在AppDelegate
中提供的对象)。编辑对象的不是用户,因此我需要避免阻止UI,此外我不只是修改对象信息,而是在需要时删除和添加新对象。
似乎有两个选项可以执行NSManagedObject
个对象的更新:在私有队列中创建“兄弟”上下文,以及创建子上下文。阅读几篇文章,有更多人说使用父/子上下文更好(如果我错了,请纠正我),但我不完全理解这是如何工作的。我有一些关于父母/子女背景的问题:
我真的需要帮助解决这个问题,提前谢谢。
答案 0 :(得分:0)
是的,孩子可以在私人队列中,而父母则在主,而相反的方式也是有效的。
合并政策......
使用合并策略对象来解决持久存储和内存版本的托管对象之间的冲突。
所以当你有多个直接来自persistentStoreCoordinator的上下文时,你最常使用它,可能是一个私有队列类型和一个主队列类型。
合并政策会影响调用
的结果 - (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification
因此,如果您的删除操作是在私有队列中完成然后保存的,那么您可以通过在主要上下文中调用mergeChanges...
来反映您的UI中的更改,其中包含来自
NSManagedObjectContextDidSaveNotification
保存私有上下文会创建。
父上下文未被替换。简单地说,孩子所做的更改会叠加在父母身上。因此,在您的情况下,删除子对象将导致该对象在您保存子对象后删除。
没有。如果你不想使用父子情境,你最好做2中描述的事情。您所描述的是丢弃当前的主要上下文并创建一个新上下文以反映PSC的新状态。它并不可怕,但它很昂贵,如果你的UI与托管对象有任何紧密的绑定,你需要确保这些对象也被重置。它更便宜只是合并保存。
使用mergeChangesFromContextDidSaveNotification:
has been measured比parent-gt; child更快地进行更改传播,但您可能会发现parent-> child在可读性方面更清晰。