gpt4 book ai didi

ios - ViewContext 没有收到来自 newBackgroundContext() 的更新

转载 作者:可可西里 更新时间:2023-11-01 03:18:59 27 4
gpt4 key购买 nike

stack overflow 中已经有类似的问题,但它对我不起作用。

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

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

你能告诉我为什么即使在启用 automaticallyMergesChangesFromParent 之后,它也只适用于插入,而不适用于更新和删除吗?如果是实际行为,还有其他方法可以解决我的用例吗?

.automaticallyMergesChangesFromParent 的文档(在 NSManagedObjectContext.h 中)说:

Whether the context automatically merges changes saved to its coordinator or parent context. Setting this property to YES when the context is pinned to a non-current query generation is not supported.

我尝试过的

  • 我通过测试更新/删除的对象是否已经存在来进行调试在 View 上下文中注册。是的,那些已经注册了。
  • 我使用 NSFetchResultController 测试了同样的东西,它工作正常很好,但不幸的是,我不能使用 NSFetchResultController 因为我使用自定义 View 来表示数据
  • 此外,我尝试创建一个新的 privateQueueConcurrencyType 上下文并将 viewContext 设置为父级,它令人惊讶地开始工作,所以问题仅在使用 newBackgroundContext() 时出现 但根据文档,它应该可以正常工作,因为两者都使用相同的 NSPersistentStoreCoordinator

提前致谢!

最佳答案

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

至于为什么在更新(以刷新形式出现)或删除时您没有收到 NSManagedObjectContextObjectsDidChange,我有一些理论:

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

  2. 可能没有在您的背景上下文中使用 performBlock

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

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

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

关于ios - ViewContext 没有收到来自 newBackgroundContext() 的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56836484/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com