2011-04-27 104 views
0

我试图通过使用NSMigrationManager进行手动迁移来执行Core Data存储的迁移。我创建在Xcode使用默认的向导映射模型(第4版),然后在代码中发现它使用核心数据存储迁移时出现的问题

[NSMappingModel mappingModelFromBundles:nil forSourceModel:sourceModel destinationModel:targetModel]; 

这似乎很好地工作。唯一的问题是,在我尝试稍微调整映射模型后(使用描述here的方法将一个实体拆分为两个)之后,以前的方法不再有效,它只返回nil(这意味着映射模型不再与源和目标模型兼容?!)。另外,有趣的是,Xcode显示了我的下拉菜单,其源模型和目标模型都没有改变,并且设置为正确的模型。

兼容性检查如何工作,并且映射模型是否真的发生了一些变化,可能导致映射模型与源/目标模型的原始组合不兼容。

更新:从模拟器卸载应用程序和恢复sqlite数据库后,它再次工作,这在我看来,就好像一些模型没有正确更新..奇怪的是,我现在想知道是否这可能发生在真正的更新或它只是一个Xcode /模拟器问题。

+0

说明:您是否曾经迁移模型,然后尝试再次迁移模型?你两次使用同一个映射模型吗? – TechZen 2011-04-28 13:59:41

+0

@TechZen:这是相同的模型,我已经恢复了sqlite文件。映射模型在物理上是相同的,但是它已经做了一些修改(调整了属性映射等) – 2011-04-28 15:07:04

回答

0

每次您使用映射模型进行迁移时,它会改变持久性存储。您必须每次开始使用同一版本的商店,并以完全相同的顺序执行迁移以获得相同的结果。

我通常会建议您定期删除并重新创建开发中使用的商店。通常我在每次测试运行开始时都这样做,即使数据集相当大。如果你不这样做,那么通过在开发代码中做出的修改,你可能会冒险在商店中建立“kruft”。