麻烦再现CoreData'无法解决故障'崩溃

时间:2014-10-09 21:58:41

标签: ios objective-c multithreading core-data

我认为这是一个典型的问题,我在后台线程上删除和更新CoreData数据,而当UITableView呈现以前获取的CoreData对象数组时,我收到:

"NSObjectInaccessibleException CoreData could not fulfill a fault for"

我已经阅读了一些建议如何修复它但在我盲目添加代码之前,我想首先重现这个问题。

对于我的测试用例,我有三个步骤。

  1. 从CoreData中获取项目
  2. 创建后台线程。在新线程中创建长循环(可能是100次迭代),其中数据库被擦除并重新加载,就像在崩溃中一样。后台线程创建一个新的NSManagedObjectContext,但与主要上下文共享PersistantStore。
  3. 将主UI线程发送到无限循环(> 10,000次迭代),该循环不断地从主要上下文中提取新项目,然后迭代所获取的对象。我也尝试过这个测试,只需迭代原始的获取对象列表而无需重新获取。
  4. 我希望这个测试用例会导致NSObjectInaccessibleException错误,但一切都运行正常,我无法重现崩溃。在检查我的代码和无法重现此错误之间,我觉得我正在做的一切正确。然而,不知何故,这种崩溃出现了。

    关于如何重新创建此崩溃的任何想法?

1 个答案:

答案 0 :(得分:0)

  1. 似乎这发生在保存背景中的Context但等待主线程与主Context合并或在合并过程中。因此,尝试在主线程中并行添加更多内容,以增加保存和合并之间的时间。
  2. 在Crashlytics中我们也遇到了这个问题(前1),并且几乎总是发生在[NSFetchedResultsController(PrivateMethods)_managedObjectContextDidChange:]的私有方法中。 (此行位于日志中间...)。因此,尝试添加/删除与TableView + NSFetchedResultsController关联的对象。 +更多reloadData这里。