核心数据:父上下文更改未合并到子上下文中

时间:2017-03-28 15:06:53

标签: ios objective-c iphone core-data nsmanagedobjectcontext

我的情况是:我有一个带有核心数据数据库的多线程应用程序,管理多个上下文。在我的上下文中,我有一个根节省上下文,以及子上下文,我获取数据并进行/保存更改。

  • 背景A - >根父上下文
  • 背景B - > A的子背景
  • 背景C - > A的子背景

上下文B用于获取数据并显示在View Controller的视图中。

Context C用于保存后台线程中的更改。

问题在于,当我在上下文C中进行更改时,保存上下文C和A,更改不会传播或合并到上下文B中。更改在上下文A和C中正确保留,但不在B中。

我认为默认行为是父上下文A中的更改将传播到它的子上下文B中,但它没有发生。实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

如果您正在处理iOS 10项目,可以尝试将上下文B 上的automaticallyMergesChangesFromParent属性设置为true

对于较旧的项目,您必须自己合并更改:

  • 观察NSManagedObjectContextDidSave通知。订阅时务必使用 Context C 作为对象。否则,您将收到来自已保存的任何上下文的通知,而不仅仅是来自 Context C
  • 使用NSManagedObjectContext.mergeChanges(fromContextDidSave:)更新上下文B 。 Objective-C选择器是-mergeChangesFromContextDidSaveNotification: