我有一个代码块,它遍历许多托管对象并从它们之间的关系访问其他托管对象。如果98%的时间都能正常工作,但有时会崩溃,并显示以下日志:


  线程6崩溃:
  
  0 libobjc.A.dylib 0x000000018d51af70 objc_msg发送+ 16
  
  1 CoreData 0x0000000190dddef0-[NSManagedObjectContext(_NSInternalAdditions)_retainedObjectWithID:optionalHandler:withInlineStorage:] + 84
  
  2 CoreData 0x0000000190e2fc40-[_ NSFaultingMutableSet willReadWithContents:] + 580
  
  3 CoreData 0x0000000190dfe1ac-[_ NSFaultingMutableSet countByEnumeratingWithState:objects:count:] + 44


我知道相关对象可能是故障。根据文档,CoreData对其进行以下处理:


  故障处理是透明的,您无需执行提取即可实现故障。如果在某个阶段访问了故障对象的持久属性,则Core Data会自动检索该对象的数据并初始化该对象。


如何解释(如果没有删除)?希望更好地了解它。

最佳答案

我知道这确实很晚,但是我只是遇到了同样的错误,希望这对其他人(以及将来对我自己)有帮助。此错误很可能是由于在与启动线程不同的线程上访问Core Data引起的。在我的情况下,核心数据是在不再位于主线程上的完成处理程序中访问的。

为了帮助调试,可以使用并发调试断言来运行代码。您可以通过在Xcode的方案编辑器的“启动时传递的参数”部分中添加-com.apple.CoreData.ConcurrencyDebug 1来启用它。 This article has instructions with that。每当从其他线程访问核心数据时,这都会导致我的应用始终崩溃,从而易于修复。

关于ios - 与故障相关的很少核心数据崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41490313/

10-13 04:00