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