在我的应用程序中创建推断映射模型(使用 Core Data 的轻量级迁移)时,我遇到了随机崩溃。顺便说一句,我必须在我的应用程序运行时以编程方式执行它。
这就是我创建这个模型的方式(当然,在我制作了正确的 currentModel 和 newModel 对象之后):
NSMappingModel *mappingModel = [NSMappingModel inferredMappingModelForSourceModel:currentModel destinationModel:newModel error:&error];
问题是这样的:此方法随机崩溃。当它工作时,它工作得很好,没有问题。但是当它崩溃时,它会使我的应用程序崩溃(而不是返回 nil 来表示该方法失败,因为它应该)。随机,我的意思是有时会发生,有时不会。这是不可预测的。
现在,这是交易:我在另一个线程中运行这个方法。更准确地说,它位于通过 GCD 传递以在全局主队列上运行的块内。我需要这样做以使我的 UI 对用户来说显得清晰,即这样我就可以在工作进行时显示进度指示器。
奇怪的是,如果我删除 GCD 的东西并让它在主线程上运行,它似乎工作正常并且永远不会崩溃。因此,可能是因为我在另一个线程上运行它而导致崩溃?
我不知何故觉得这很奇怪,因为我不相信我违反了任何关于多线程的 Core Data 规则。特别是,我没有传递任何托管对象,并且每当我需要访问 MOC 时,我都会创建一个新的 MOC,即我不依赖任何之前创建的 MOC(或就此而言:任何东西)在主线程上。除了发生的一些 MOC 东西之外,发生在映射模型创建方法之后,即在应用程序崩溃的点之后,所以它不可能是这里考虑的崩溃的原因。
我所做的只是获取两个 MOM 并要求它们之间的映射模型。即使在线程下也不会出错,现在可以吗?
关于可能发生的事情有什么想法吗?