我尝试使用NSMigrationManager手动迁移来执行Core Data存储的迁移。我使用默认向导在Xcode(版本4)中创建了一个映射模型,然后在代码中使用
创建了它[NSMappingModel mappingModelFromBundles:nil forSourceModel:sourceModel destinationModel:targetModel];
似乎工作正常。唯一的问题是,在我尝试稍微调整映射模型之后(使用描述here的方法将一个实体拆分为两个),之前的方法不再起作用,它只返回nil(这会意味着映射模型不再与源模型和目标模型兼容?!)。另外,有趣的是Xcode向我展示了映射模型的源模型和目标模型的下拉列表,这些模型没有改变并且设置为正确的模型。
兼容性检查如何工作,并且映射模型确实存在一些更改,这些更改可能导致它与源/目标模型的原始组合不兼容。
更新:从模拟器卸载应用程序并恢复sqlite数据库后,它再次工作,这看起来好像有些模型没有正确更新...奇怪,我现在想知道这是否可以在真正的更新期间发生,或者它只是一个Xcode / Simulator问题..
答案 0 :(得分:0)
每次使用映射模型进行迁移时,都会改变持久性存储。您必须每次都使用相同版本的商店,并以完全相同的顺序执行迁移以获得相同的结果。
我通常建议您定期删除并重新创建开发中使用的商店。通常我会在每次测试运行开始时这样做,即使数据集相当大。如果你不这样做,那么你就有可能通过在开发代码中所做的更改在商店中建立“kruft”。