Ios 无法复制CoreData“无法完成故障”崩溃

Ios 无法复制CoreData“无法完成故障”崩溃,ios,objective-c,multithreading,core-data,Ios,Objective C,Multithreading,Core Data,我认为这是一个比较典型的问题,我在后台线程上删除和更新CoreData数据,当UITableView呈现以前获取的CoreData对象数组时,我收到: "NSObjectInaccessibleException CoreData could not fulfill a fault for" 我已经读了很多关于如何修复它的建议,但是在我盲目添加代码之前,我想先重现这个问题 对于我的测试用例,我有三个步骤 从CoreData获取项目 创建一个背景线程。在新线程中,创建长循环(可能是100次迭代)

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

"NSObjectInaccessibleException CoreData could not fulfill a fault for"
我已经读了很多关于如何修复它的建议,但是在我盲目添加代码之前,我想先重现这个问题

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

从CoreData获取项目 创建一个背景线程。在新线程中,创建长循环(可能是100次迭代),其中数据库被擦除并重新加载,就像崩溃中一样。后台线程创建新的NSManagedObjectContext,但与主上下文共享PersistantStore。 将主UI线程发送到一个大于10000次迭代的无限循环中,该循环不断地从主上下文获取新项目,然后迭代获取的对象。我还尝试了这个测试,只需在原始的已获取对象列表上迭代,而无需重新获取。 我希望这个测试用例会导致NSObjectionaccessibleException错误,但一切都很好,我无法重现崩溃。在检查代码和无法重现此错误之间,我感觉我做的每件事都是正确的。然而,不知何故,这场崩溃在野外出现了

你知道我该如何重现这次坠机吗

似乎在后台的上下文被保存,但等待主线程与主上下文合并,或在合并过程中发生这种情况。因此,尝试在主线程中添加更多的内容,以增加保存和合并之间的时间。 在Crashlytics中,这个问题也排在第一位,而且几乎总是发生在[NSFetchedResultsControllerPrivateMethods]的私有方法中。这条线在原木的中间…因此,请尝试添加/删除与TableView+NSFetchedResultsController关联的对象这里有更多的重新加载数据。
好主意我将尝试将正在保存的记录数大幅增加至少一倍。在重新加载包含原始数据的UITableVIew的同时,我已添加了多达100000条要删除和保存的记录。我似乎无法重现这次崩溃,但它仍然出现在Crashlytics中。