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

时间:2010-01-28 14:24:08

标签: iphone core-data nsfetchedresultscontroller

我有一个NSFetchedResultsController设置为根据我的'main'NSManagedObjectContext填充UITableView。

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

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

我已经创建了一个测试项目并将其置于 here



(我最初认为这是因为有多个线程正在运行;但是,当一切都在一个线程中完成时会发生。)

原始问题

我有一个NSFetchedResultsController设置来填充UITableView,基于我的'main'NSManagedObjetContext。

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

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

使用调试器,我可以看到它们进来,并验证它们确实是在上下文中添加对象。但是,我的NSFetchedResultsController没有更新。如果我在主线程中执行此操作,它确实有效。在控制器上调用-performFetch:会导致它更新,所以我知道并不是它没有看到新对象。

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

1 个答案:

答案 0 :(得分:11)

您是否从NSFetchedResultsController获得任何委托回调?如果没有,那么这可能是NSFetchedResultsController本身的错误。我建议创建一个可以单独确认/否认此问题的测试项目。

如果你可以单独复制它;

  1. 我很乐意看到它:)。
  2. 向Apple提交雷达。
  3. 审核完代码后,答案是将通知观察者从NSManagedObjectContextWillSaveNotification更改为NSManagedObjectContextDidSaveNotification。您发送的消息只是 之前发生了保存,这导致了您的问题。