堆栈溢出中已经有一个类似的问题,但它对我不起作用。
在我的应用程序中有一个用例,我必须观察数据库更改才能执行某些操作。为了接收更新,我订阅了 NSManagedObjectContextObjectsDidChange
通知(针对 ViewContext)并且我打开了automaticallyMergesChangesFromParent
.
但是,如果我update
或delete
其他上下文中的对象(使用newBackgroundContext()
),我不会收到对象确实更改通知,但它对inserting
新对象非常有效。
有人可以指导我为什么它仅适用于插入,即使在启用后也不适用于更新和删除automaticallyMergesChangesFromParent
?如果这是实际行为,还有其他方法可以解决我的用例吗?
文档(in NSManagedObjectContext.h
).automaticallyMergesChangesFromParent
说:
上下文是否自动合并保存到其协调器或父上下文的更改。当上下文固定到非当前查询生成时,不支持将此属性设置为 YES。
我试过的
- 我通过测试是否已在视图上下文中注册更新/删除的对象来进行调试。是的,那些已经注册了。
- 我用
NSFetchResultController
它测试了同样的东西,但不幸的是,我不能使用NSFetchResultController
,因为我使用自定义视图来表示数据 - 另外,我尝试创建一个新的
privateQueueConcurrencyType
上下文并设置viewContext
为父级,它出人意料地开始工作,所以问题只是在使用时,newBackgroundContext()
但根据文档,它应该可以正常工作,因为两者都使用相同NSPersistentStoreCoordinator
提前致谢!