迁移核心数据和映射模型

时间:2013-04-05 07:26:33

标签: ios core-data model migration mapping

我希望一切都对你好。)

我有一个使用Core Data的数据库。在我的应用程序V1.0中,用户可以在应用程序中导入一些文件。现在,对于我的V2.0,我想在我的模型中添加一个属性,但拥有V1.0并拥有一些存储文件的用户必须保存所有文件(如果他们升级应用程序则不会删除...) 。因此,我使用new属性创建了一个新的数据模型,并将当前版本化的核心数据模型设置为我的新数据模型......好的。但如果启动我的应用程序,该文件将被删除。

通常,我必须使用映射模型。但是怎么做呢?在创建映射模型时,哪个是源数据模型和目标数据模型?

非常感谢你的帮助! 祝大家一切顺利! :)

编辑:

如果我只添加一个新属性但不编辑属性名称,也许我不需要创建一个映射模型......不是吗?

1 个答案:

答案 0 :(得分:4)

如果使用映射模型,您的源模型将是v1.0模型,目标将是您的新v2.0模型。通过使用轻量级迁移,文档here

,您可以在不使用映射模型的情况下逃脱

所说的要点是,您需要转到App Delegate并为持久性商店设置相关选项。

应该看起来像

NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @YES, NSInferMappingModelAutomaticallyOption: @YES};

[persistentStoreCoordinator addPersistentStoreWithType:storeType configuration:config URL:storeURL options:options error:&error];

NSMigratePersistentStoresAutomaticallyOption键告诉Core Data检查当前的托管对象模型版本是否与您正在使用的商店不同,并将商店迁移到更新的模型。 NSInferMappingModelAutomaticallyOption告诉它尝试自己完成映射。这是“轻量级迁移”位。

大部分内容已经存在,您需要做的就是添加选项字典。它将采用- (NSPersistentStoreCoordinator *)persistentStoreCoordinator方法。如果您未设置至少NSMigratePersistentStoresAutomaticallyOption,则不会进行迁移。

轻量级映射在开发时也很有用。这意味着您可以对模型进行更改,而无需每次都重做映射。