首页 > 解决方案 > ViewContext 未从 newBackgroundContext() 接收更新

问题描述

堆栈溢出中已经有一个类似的问题,但它对我不起作用。

在我的应用程序中有一个用例,我必须观察数据库更改才能执行某些操作。为了接收更新,我订阅了 NSManagedObjectContextObjectsDidChange通知(针对 ViewContext)并且我打开了automaticallyMergesChangesFromParent.

但是,如果我updatedelete其他上下文中的对象(使用newBackgroundContext()),我不会收到对象确实更改通知,但它对inserting新对象非常有效。

有人可以指导我为什么它仅适用于插入,即使在启用后也不适用于更新和删除automaticallyMergesChangesFromParent?如果这是实际行为,还有其他方法可以解决我的用例吗?

文档(in NSManagedObjectContext.h.automaticallyMergesChangesFromParent说:

上下文是否自动合并保存到其协调器或父上下文的更改。当上下文固定到非当前查询生成时,不支持将此属性设置为 YES。

我试过的

提前致谢!

标签: ioscore-datansmanagedobjectnsmanagedobjectcontextnspersistentcontainer

解决方案


“我不能使用NSFetchResultController自定义视图来表示数据”不是真的,FRC 可以而且应该与任何视图(显示多个对象)一起使用。

至于为什么NSManagedObjectContextObjectsDidChange在更新(刷新)或删除的情况下您没有收到,我有一些理论:

  1. 可能没有正确调用_persistentContainer.viewContext.automaticallyMergesChangesFromParent = YES;,因为这正是您描述的情况(接收插入但不接收更新或删除)。它应该在之后loadPersistentStoresWithCompletionHandler(而不是在块内)在您的应用程序委托中的 persistentContainer 自定义 getter 中完成。

  2. 也许不performBlock与您的背景上下文一起使用。

  3. 可能未正确注册更改通知。

  4. (根据新信息)不保留获取的对象。

如果您想分享一些代码,我们可以帮助您追踪错误。


推荐阅读