gpt4 book ai didi

iphone - NSFetchedResultsController 不显示来自其他上下文的更新

转载 作者:行者123 更新时间:2023-12-03 18:52:54 25 4
gpt4 key购买 nike

我设置了一个 NSFetchedResultsController 来填充 UITableView,基于我的“主”NSManagedObjectContext。

在计时器中,我不断地将对象添加到单独的 NSManagedObjectContext 中,但它与主上下文共享其 NSPersistantStoreCoordinator。

我可以看到正在发送 NSManagedObjectContextWillSaveNotification 通知,当我退出并重新启动应用程序时,我拥有上次运行的所有数据。但是,当前 NSFetchedResultsController 没有发生任何更新。

我创建了一个测试项目并将其放置 here .



(我最初认为这是因为有多个线程在起作用;然而,当所有事情都在一个线程中完成时,就会发生这种情况)。

原始问题

我设置了一个 NSFetchedResultsController 来填充 UITableView,基于我的“主”NSManagedObjetContext。

在后台线程中,我下载多个对象并将其导入到单独的 NSManagedObjectContext 中,但该对象与主线程的上下文共享其 NSPersistantStoreCoordinator。

我已注册接收 NSManagedObjectContextWillSaveNotification 通知。当我得到这些时,我将它们转发到主线程,并将它们传递到我的主上下文。

使用调试器,我可以观察它们的进入,并验证它们是否确实将对象添加到上下文中。但是,我的 NSFetchedResultsController 没有更新。如果我在主线程中完成这一切,它确实有效。在 Controller 上调用 -performFetch: 将导致其更新,所以我知道这并不是说它没有看到新对象。

其中大部分是样板代码,只是分成不同的线程。

最佳答案

您是否从 NSFetchedResultsController 收到任何委托(delegate)回调?如果不是,那么这可能是 NSFetchedResultsController 本身的错误。我建议创建一个测试项目来单独确认/否认这个问题。

如果你可以单独复制它;

  1. 我很想看看:)
  2. 向 Apple 提交雷达报告。

查看代码后,答案是将通知观察器从 NSManagedObjectContextWillSaveNotification 更改为 NSManagedObjectContextDidSaveNotification。您在保存之前发送了消息,这导致了您的问题。

关于iphone - NSFetchedResultsController 不显示来自其他上下文的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155111/

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