2013-04-05 63 views
2

我希望一切都很好:)迁移核心数据和映射模型

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

通常情况下,我必须使用映射模型。但如何做到这一点?当我创建映射模型时,哪个是源数据模型和目标数据模型?

非常感谢您的帮助! 祝你有美好的一天! :)

编辑:

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

回答

4

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

这就是说你需要去你的应用程序委托并设置持久存储的相关选项。

它应该是这个样子

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

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

NSMigratePersistentStoresAutomaticallyOption键告诉核心数据检查当前管理对象模型版本是你使用,并到店迁移到更新的模型商店不同。 NSInferMappingModelAutomaticallyOption告诉它试图将自己的映射工作。这是'轻量级迁移'位。

大部分情况已经存在,您只需添加选项字典即可。它将在- (NSPersistentStoreCoordinator *)persistentStoreCoordinator方法中。如果您未设置至少NSMigratePersistentStoresAutomaticallyOption,则不会进行移植。

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