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

6ro*_*od9 6 iphone core-data objective-c nsmanagedobjectcontext ios

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

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

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

上下文C用于将更改保存在后台线程中。

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

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

nil*_*ils 6

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

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

  • 遵守NSManagedObjectContextDidSave通知。订阅时,请确保使用上下文C作为对象。否则,您将从已保存的任何上下文中收到通知,而不仅仅是从上下文C中收到。
  • 使用NSManagedObjectContext.mergeChanges(fromContextDidSave:)以更新情境B。Objective-C选择器是-mergeChangesFromContextDidSaveNotification:

  • 注意!请注意,“automaticallyMergesChangesFromParent”不会在父上下文上调用 save 后立即合并更改。有轻微的延迟。如果您需要立即合并更改,还可以使用“[context refreshObject:mergeChanges]”方法。 (3认同)