调试 CoreData 异常

Posted

技术标签:

【中文标题】调试 CoreData 异常【英文标题】:Debugging CoreData Exceptions 【发布时间】:2012-03-15 10:14:56 【问题描述】:

在尝试从 UITableView 中删除对象时,我遇到了间歇性且难以跟踪 CoreData 异常的情况。

在 SO 上有很多关于此的讨论,但它们都特定于各种实现,并且很难应用于您自己的最佳实践。我看到的教程对设置很有帮助,但在教你解决问题方面不太好。

调试/解决此类 CoreData 错误的最佳方法是什么?正确执行的预期流程是什么?

类似这样的错误:

严重的应用程序错误。从委托中捕获了异常 调用期间的 NSFetchedResultsController -controllerDidChangeContent:。无效更新:第 0 节中的行数无效。现有节中包含的行数 更新后(3)必须等于包含的行数 更新前的那个部分(3),加减行数 从该部分插入或删除(0 插入,1 删除)和加上 或减去移入或移出该部分的行数(0 移动 入,0 移出)。与 userInfo (null)

【问题讨论】:

【参考方案1】:

您是否尝试过使用异常断点? - 它应该告诉您导致异常的特定代码行。 要在 xcode 中添加一个断点导航器,请单击导航器左下角的“+”,然后点击添加异常断点。

【讨论】:

谢谢,是的,我知道了——所有这些都告诉我,我在 [self.tablview endupdates] 上遇到了一个错误,到目前为止它并不是很有用。【参考方案2】:

我认为这里发生的所有事情是,您需要调整任何 NSMutableArray(或其他)以删除您告诉 NSFetchedResultsController 刚刚删除的对象。您之前有 3 个对象,您表示其中一个已被删除,那么它期望第 0 部分中的行现在应该包含 2,而不是它仍然检测到的 3。

我知道这不是您要问的确切问题,但“最佳方法”问题可能有点笼统,无法得到一个好的单一答案。

【讨论】:

这个问题实际上是由一个多余的 FetchedResultsController 和 UITableView 设置为它的委托引起的(这里有一个讨论:***.com/a/9755379/459116),但我仍然希望将来有一些调试策略,而不是那些具体到这个案例。 CoreData 一直调试有点麻烦!【参考方案3】:

问题实际上是由一个多余的 FetchedResultsController 将 UITableView 设置为它的委托引起的(这里有一个讨论:***.com/a/9755379/459116)

【讨论】:

以上是关于调试 CoreData 异常的主要内容,如果未能解决你的问题,请参考以下文章

彻底掌握Xcode CoreData调试技巧看这一篇就够了

iOS:更新数据时出现CoreData异常

如何找到“CoreData 无法完成故障”异常

CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常

CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常

使用 ZSync 和 CoreData 同步时如何调试“未指定实体”