我希望一切都对你好。)
我有一个使用Core Data的数据库。在我的应用程序V1.0中,用户可以在应用程序中导入一些文件。现在,对于我的V2.0,我想在我的模型中添加一个属性,但拥有V1.0并拥有一些存储文件的用户必须保存所有文件(如果他们升级应用程序则不会删除...) 。因此,我使用new属性创建了一个新的数据模型,并将当前版本化的核心数据模型设置为我的新数据模型......好的。但如果启动我的应用程序,该文件将被删除。
通常,我必须使用映射模型。但是怎么做呢?在创建映射模型时,哪个是源数据模型和目标数据模型?
非常感谢你的帮助! 祝大家一切顺利! :)
编辑:
如果我只添加一个新属性但不编辑属性名称,也许我不需要创建一个映射模型......不是吗?
答案 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
,则不会进行迁移。
轻量级映射在开发时也很有用。这意味着您可以对模型进行更改,而无需每次都重做映射。