tha*_*rai 8 core-data nsmanagedobject nsmanagedobjectcontext ios nspersistentcontainer
堆栈溢出中已经有一个类似的问题,但是对我来说不起作用。
我的应用程序中有一个用例,其中我必须观察数据库的更改以执行某些操作。为了接收更新,我订阅了 NSManagedObjectContextObjectsDidChange通知(针对ViewContext),并且我也将其打开automaticallyMergesChangesFromParent。
但是,如果我update或delete某个对象在其他上下文上(使用newBackgroundContext()),则我不会收到对象发生更改通知,但它对于inserting新对象而言效果很好。
有人可以指导我为什么它仅对插入有效,即使启用后也不对更新和删除有效automaticallyMergesChangesFromParent吗?如果是实际行为,是否还有其他方法可以解决我的用例?
的文档(在中NSManagedObjectContext.h).automaticallyMergesChangesFromParent说:
上下文是否自动合并保存到其协调者或父上下文的更改。不支持将上下文固定到非当前查询生成时将此属性设置为YES。
我尝试了什么
NSFetchResultController它的正常工作测试了同一件事,但不幸的是,NSFetchResultController由于使用自定义视图来表示数据,因此无法使用privateQueueConcurrencyType上下文并将其设置viewContext为父级,并且令人惊讶地开始工作,因此问题仅在使用时出现,newBackgroundContext()但根据文档,它应该正常工作,因为两者都使用相同NSPersistentStoreCoordinator提前致谢!
“我可以\xe2\x80\x99t 使用NSFetchResultController,因为我使用自定义视图来表示数据”不是真的,FRC 可以而且应该与任何视图(显示多个对象)一起使用。
至于为什么NSManagedObjectContextObjectsDidChange在更新(刷新后出现)或删除的情况下您没有收到,我有一些理论:
也许没有正确调用,_persistentContainer.viewContext.automaticallyMergesChangesFromParent = YES;因为这正是您所描述的情况(接收插入但不更新或删除)。它应该在应用程序委托中的 persisterContainer 自定义 getter 中完成loadPersistentStoresWithCompletionHandler(而不是在块内)。
performBlock也许不与您的背景环境一起使用。
可能没有正确注册更改通知。
(根据新信息)不保留获取的对象。
如果您想分享一些代码,我们可以帮助您找出错误。
\n| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |