编辑模型后缺少映射模型

时间:2014-01-07 22:44:04

标签: ios xcode core-data migration core-data-migration

我正在进行手动核心数据迁移,并继续遇到Cocoa Error 134140:NSMigrationMissingMappingModelError。我注意到,每当我对模型进行任何更改时都会发生这种情况,即使是将属性标记为可选项的小事。到目前为止,我发现这种情况的唯一解决方案是删除我的映射模型并创建一个新的映射模型。有没有更好,更乏味的解决方案?

3 个答案:

答案 0 :(得分:4)

有一个菜单选项来解决这个问题。如果在创建映射模型后随时更新模型,请执行以下操作:

  1. 选择映射模型。
  2. 选择编辑器 - >刷新数据模型。

答案 1 :(得分:2)

这是因为:

  • 迁移图通过实体哈希标识模型文件,
  • 更改实体时,更改其哈希值。

更改模型时,地图不再匹配,迁移失败,因为找不到匹配的地图。

解决方法是在确定新模型的样子之前不要搞乱迁移。然后使用模型的最终版本创建地图。如果您无法完成新模型并需要进行迁移,那么您已经发现了必要的过程。

答案 2 :(得分:1)

汤姆是对的,但我会更进一步。我永远不会做手动/重型迁移。如果无法在轻量级迁移中完成,请考虑进行导出/导入。它比重度迁移更快,性能更高。

我的标准建议是让您的更改保持足够小,以便始终可以进行轻量级迁移。

导入/导出更新

重量级迁移是OS X的延续,内存很便宜。它不应该在iOS中使用。那么正确的答案是什么?

我向人们推荐的是自己处理。尽可能轻量级的迁移,即使它需要遍历几个模型才能从A到B.但是在你的情况下听起来不太可能。

所以第二个选项是导出/导入。将Core Data导出到JSON非常容易。我甚至在Stack Overflow post中做了一个简单的例子。

首先,你站起来了旧模型和当前商店。这包括找到正确的模型版本并使用[[NSManagedObjectModel alloc] initWithContentsofURL:]手动加载它并指向正确的模型版本。有关如何在我的书中找到合适的模具版本的细节(笑)。

然后将当前模型导出为JSON。这应该相当快。但是,出于显而易见的原因,请勿在{{1​​}}中执行此操作。

第二步是使用“当前”模型加载新的Core Data堆栈并导入该JSON。由于JSOn采用已知格式,因此您可以非常轻松地导入它。

这将允许您控制整个体验并避免重度迁移带来的问题。