【问题标题】:NSFetchedResultsController with backgroundContext and mainContext, nasty errorNSFetchedResultsController 与 backgroundContext 和 mainContext,讨厌的错误
【发布时间】:2011-10-25 17:32:12
【问题描述】:

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

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

现在糟糕的事情发生在这里

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

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

任何关于如何使 NSFetchedResultsController 工作并解决此问题的指针将不胜感激。

感谢您花时间阅读我的问题!

【问题讨论】:

  • 崩溃的详细信息是什么?您可以提供任何控制台日志或其他信息吗?当可能在后台以编程方式填充数据以查看问题是否与您的数据下载有关时,合并是否有效?
  • 我在控制台中得到的唯一输出是这个:2011-10-25 20:56:31.326 ArticleViewer[9345:207] Merge context 2011-10-25 20:56:31.327 ArticleViewer[ 9345:207] 控制器将更改内容这些是我在代码中插入的 NSLog,第一个是在触发 mergeContext 之前,第二个是在 controllerWillChangeContent:NSFetchedResultsController 的委托方法中 问题不在CoreData,因为我第二次运行该应用程序时 CD 内容正确显示
  • EXC_BAD_ACCESS 表示您或其他对象正在向不再存在的对象发送消息。您可能想用谷歌搜索“CocaDev NSZombieEnabled”来设置正确的选项,以确定哪些 Dealloc 的对象正在接收消息。从屏幕截图中的堆栈跟踪来看,它似乎与您的上下文或 NSFetchedResultsController 相关联。
  • 粘贴代码和控制台以文本而不是图像的形式登录会更有帮助。这些图像几乎无法阅读。
  • Marcus 和 TechZen,您能发布一些您的委托方法吗?

标签: iphone multithreading core-data nsfetchedresultscontroller


【解决方案1】:

如果我的 NSFetchedResultsController 的委托是 nil 而我这样做 mergeChangesFromContextDidSaveNotification:一切正常,但我的 UI 没有更新,我必须在我的 fetchResultsController

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

如果我将委托分配给 NSFetchedResultsController 应用 当它到达时崩溃 mergeChangesFromContextDidSaveNotification: 行(见截图 下面)

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

【讨论】:

  • 错误是当我创建 NSFetchedResultsController 时,我释放了一个导致应用程序崩溃的描述符。所以我会把你的答案标记为好,因为错误在 fetchedResultsController 并且与上下文合并操作无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多