【问题标题】:Migrating Core Data and Mapping Model迁移核心数据和映射模型
【发布时间】:2013-03-27 12:41:05
【问题描述】:

希望你一切都好:)

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

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

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

编辑:

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

【问题讨论】:

    标签: ios core-data model migration mapping


    【解决方案1】:

    如果使用映射模型,您的源模型将是 v1.0 模型,而目标模型将是您的新 v2.0 模型。使用 Lightweight Migration,文档 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,则不会发生迁移。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多