代码之家  ›  专栏  ›  技术社区  ›  Ben Gottlieb

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

  •  5
  • Ben Gottlieb  · 技术社区  · 14 年前

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

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

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

    我已经创建了一个测试项目并放置了它 here



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

    原始问题

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

    通过使用调试器,我可以看到这些对象进入,并验证它们是否确实在向上下文添加对象。但是,我的NSFetchedResultsController未更新。如果我在主线程中完成这一切,它就会工作。在控制器上调用-performFetch:会导致它更新,所以我知道这不是因为它没有看到新对象。

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

    1 回复  |  直到 14 年前
        1
  •  11
  •   Marcus S. Zarra    14 年前

    您是否收到来自NSFetchedResultsController的任何代理回调?如果不是,则这可能是NSFetchedResultsController本身的错误。我建议创建一个可以单独确认/否认这个问题的测试项目。

    1. 向苹果提交雷达文件。

    查看代码后,答案是将通知从 NSManagedObjectContextWillSaveNotification NSManagedObjectContextDidSaveNotification . 你刚才在发信息 之前 发生了导致您的问题的保存操作。