如何找到“CoreData 无法完成故障”异常
Posted
技术标签:
【中文标题】如何找到“CoreData 无法完成故障”异常【英文标题】:How to find a "CoreData could not fulfill a fault" Exception 【发布时间】:2013-06-11 06:28:36 【问题描述】:我使用MagicalRecord
来处理我所有的CoreData
正在发生的事情,并使用NSFetchedResultsControllers
来显示TableViews
和CollectionViews
中的数据。
问题是,在我的应用程序的某个地方,我似乎遇到了 "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 无法完成故障”异常的主要内容,如果未能解决你的问题,请参考以下文章