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

Posted

技术标签:

【中文标题】如何找到“CoreData 无法完成故障”异常【英文标题】:How to find a "CoreData could not fulfill a fault" Exception 【发布时间】:2013-06-11 06:28:36 【问题描述】:

我使用MagicalRecord 来处理我所有的CoreData 正在发生的事情,并使用NSFetchedResultsControllers 来显示TableViewsCollectionViews 中的数据。

问题是,在我的应用程序的某个地方,我似乎遇到了 "CoreData could not fulfill a fault" 异常的问题。

是否有解决方案可以在我的应用程序的这一部分设置断点?我遇到的主要问题是它崩溃了,我不知道在哪里可以找到它! “所有异常”断点似乎没有帮助......

顺便说一句。我没有保留任何managedObjects...这对我来说更奇怪...

感谢任何帮助

【问题讨论】:

【参考方案1】:

当您的代码(或 MagicalRecord)在托管对象上下文中(通常在另一个线程上)保留由 CoreData 删除的对象时,会发生此错误。我会确保我不会存储临时对象或可能作为属性删除的对象,在集合等中。因为你提到你没有,我会确保我没有可能不同步的线程代码,最终,我会确保 MagicalRecord 没有针对一对多关系类的线程后台删除或虚假垃圾收集,或可能导致问题的其他东西。

作为一种解决方案,您可以手动检查故障对象以避免崩溃。看看这个问题的方法来做到这一点: How can I tell whether an `NSManagedObject` has been deleted?

对不起,如果这太笼统了,但是如果没有看到您的应用程序,很难说出您究竟为什么会收到错误。

【讨论】:

【参考方案2】:

也许摆脱像 MagicalRecord 这样的第三方框架会有所帮助。我的经验是,这些框架几乎没有增加价值,而且可能会造成严重破坏。

我认为不保留托管对象与此无关。

另一个建议是,您可以在访问托管对象的代码中广泛使用日志语句。这应该可以帮助您缩小错误的可能位置。结合 Instruments,您可能很快就会抓住罪魁祸首。

【讨论】:

以上是关于如何找到“CoreData 无法完成故障”异常的主要内容,如果未能解决你的问题,请参考以下文章

在am中定义消息集束,并在CO中验证之后抛出异常。

如何找到被“忽略”的异常?

如何找到系列中的异常值,矢量化?

如何使用 mockito 为以下异常处理程序方法编写单元测试?

如何接收 2 个或更多不同的异常?

如何确定“未找到属性”异常的原因?