NSFetchedResultsController与backgroundContext和mainContext,讨厌的错误

时间:2011-10-25 17:32:12

标签: iphone multithreading core-data nsfetchedresultscontroller

我已经挣扎了大约4个小时的错误。这就是我所拥有的:

  • 我有一个带有NSFetchedResultsController的TableViewController,TableViewController类实现了所有fetchedResultsController委托方法
  • 我第一次运行应用时核心数据是空的
  • 在后台线程中我下载了东西并将其添加到核心数据中,我有一个后台管理对象上下文。
  • 在表视图控制器中,我注册了NSManagedObjectContextDidSaveNotification,当我保存后台上下文时,我的通知回调被调用,我尝试将主上下文与后台上下文合并。

enter image description here

现在讨厌的事情发生在这里

  • 如果我的NSFetchedResultsController的委托是nil并且我做mergeChangesFromContextDidSaveNotification:一切正常但我的UI没有更新,我必须在我的fetchResultsController上做另一个fetchRequest

  • 如果我将一个委托分配给NSFetchedResultsController,那么当应用程序到达mergeChangesFromContextDidSaveNotification:行时会崩溃(参见下面的屏幕截图)

enter image description here

有关如何使NSFetchedResultsController工作并修复此问题的任何指示将非常感激。

感谢您抽出宝贵时间阅读我的问题!

1 个答案:

答案 0 :(得分:2)

  

如果我的NSFetchedResultsController的委托是nil而我是   mergeChangesFromContextDidSaveNotification:一切正常但我的UI   没有得到更新,我必须在我的另一个fetchRequest   fetchResultsController

这是预期的行为,因为委托是强制UI更新的唯一对象。

  

如果我将一个委托分配给NSFetchedResultsController应用程序   当它到达时崩溃   mergeChangesFromContextDidSaveNotification:line(见截图   下文)

合并上下文的过程将在正在进行时触发通知,因此可以在合并正在进行时调用NSFetchedResultsControllerdelegate方法。如果分配代理是触发崩溃的 only 更改,那么无论调试器显示错误的位置如何,错误都必须在NSFetchedResultsController委托方法中。