核心数据:父上下文更改未合并到子上下文中
Core-Data: Parent context changes not being merged into child context
我的情况是:我有一个带有核心数据数据库的多线程应用程序,管理多个上下文。在我的上下文层次结构中,我有一个根保存上下文,以及我在其中获取数据和 make/save 更改的子上下文。
- 上下文 A -> 根父上下文
- 上下文 B -> A 的子上下文
- 上下文 C -> A 的子上下文
上下文 B 用于获取数据并显示在视图控制器的视图中。
上下文 C 用于在后台线程中保存更改。
问题是,当我在上下文 C 中进行更改并保存上下文 C 和 A 时,更改不会传播或合并到上下文 B 中。更改正确地保留在上下文 A 和 C 中,但不会保留在B.
我认为默认行为是父上下文 A 中的更改将传播到它的子上下文 B,但它没有发生。实现这一目标的正确方法是什么?
如果您正在处理 iOS 10 项目,您可以尝试将 上下文 B 上的 automaticallyMergesChangesFromParent
属性 设置为 true
.
对于较旧的项目,您必须自己合并更改:
- 注意
NSManagedObjectContextDidSave
通知。确保在订阅时使用 Context C 作为对象。否则,您将收到来自已保存的任何上下文的通知,而不仅仅是来自 Context C.
- 使用
NSManagedObjectContext.mergeChanges(fromContextDidSave:)
更新上下文B。 Objective-C 选择器是 -mergeChangesFromContextDidSaveNotification:
我的情况是:我有一个带有核心数据数据库的多线程应用程序,管理多个上下文。在我的上下文层次结构中,我有一个根保存上下文,以及我在其中获取数据和 make/save 更改的子上下文。
- 上下文 A -> 根父上下文
- 上下文 B -> A 的子上下文
- 上下文 C -> A 的子上下文
上下文 B 用于获取数据并显示在视图控制器的视图中。
上下文 C 用于在后台线程中保存更改。
问题是,当我在上下文 C 中进行更改并保存上下文 C 和 A 时,更改不会传播或合并到上下文 B 中。更改正确地保留在上下文 A 和 C 中,但不会保留在B.
我认为默认行为是父上下文 A 中的更改将传播到它的子上下文 B,但它没有发生。实现这一目标的正确方法是什么?
如果您正在处理 iOS 10 项目,您可以尝试将 上下文 B 上的 automaticallyMergesChangesFromParent
属性 设置为 true
.
对于较旧的项目,您必须自己合并更改:
- 注意
NSManagedObjectContextDidSave
通知。确保在订阅时使用 Context C 作为对象。否则,您将收到来自已保存的任何上下文的通知,而不仅仅是来自 Context C. - 使用
NSManagedObjectContext.mergeChanges(fromContextDidSave:)
更新上下文B。 Objective-C 选择器是-mergeChangesFromContextDidSaveNotification: