我正在尝试迁移到项目中一个完全不同的新模型。这些更改对于轻量级迁移来说太过分了,我认为最好的方法是遍历顶级对象并自己设置所有属性和关系。
如何将迁移过程设置为完全手动,如下所示。我查看了NSMigrationManager,它似乎需要一个NSMappingModel。我见过的唯一示例和教程使用inferredMappingModelForSourceModel:destinationModel:error:
,我无法使用它,因为它无法推断映射模型。
我是否在正确的道路上,如果是这样,我如何在代码中完全手动创建映射模型?谢谢你的帮助。
答案 0 :(得分:1)
如果您的模型更改至少具有源和目标实体级别映射(例如,您的旧模型中有一个Vehicle
实体,现在您希望将该数据迁移到{{1}然后,您可以将自定义映射模型与迁移策略一起使用。
该过程相当简单,在Xcode中,尝试向项目添加新的映射模型文件,选择源模型版本和目标模型版本。 Xcode试图巧妙地弄清楚源和目标实体的属性之间的映射。如果它不能,它只会将映射留空,您可以设置自己的映射。
如果您想在映射期间执行除简单分配或消隐或为属性设置默认值之外的其他操作,请使用名为Car
的内容。创建自己的子类并实现此方法来执行自定义映射:
NSEntityMigrationPolicy
您可以详细了解如何进行自定义迁移here。
答案 1 :(得分:0)
结帐CDWrangler。它是一个开源的Core Data控制器,可以逐步处理轻量级和手动迁移。
创建映射模型以及所需的任何自定义策略后,只需执行此操作
// Migration
if ([[CDWrangler sharedWrangler] isMigrationNeeded]) {
// The key is the name of your starting model, and the value is the name of your mapping model. In this example they are Model.xcdatamodel and MappingModel.xcmappingmodel
[CDWrangler sharedWrangler].mappingsForModels = @{@"Model": @"MappingModel"};
[[CDWrangler sharedWrangler] migrate];
}