5

根据我的“主要”NSManagedObjectContext,我设置了一个 NSFetchedResultsController 来填充 UITableView。

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

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

我创建了一个测试项目并将其放置在这里



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

原始问题

根据我的“主要”NSManagedObjetContext,我设置了一个 NSFetchedResultsController 来填充 UITableView。

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

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

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

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

4

1 回答 1

11

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

如果可以单独复制;

  1. 我很乐意看看 :)
  2. 向 Apple 提交雷达文件。

查看代码后,答案是将通知观察者从 更改NSManagedObjectContextWillSaveNotificationNSManagedObjectContextDidSaveNotification。您在导致您的问题的保存发生之前发送消息。

于 2010-01-29T02:37:21.850 回答