多个版本的xcdatamodel是否意味着我们需要多个xcmappingmodel文件?

时间:2012-02-06 15:35:51

标签: xcode core-data core-data-migration xcdatamodel

我有多个版本的xcdatamodel文件:

app1.0.xcdatamodel
app1.1.xcdatamodel
app1.2.xcdatamodel (current)

这是否意味着我需要多个xcmappingmodel文件组合来涵盖所有升级方案?

app1.0_to_app1.1.xcmappingmodel (had this already)
app1.1_to_app1.2.xcmappingmodel (is it iterative?)
app1.0_to_app1.2.xcmappingmodel (too much?)

谢谢!

3 个答案:

答案 0 :(得分:4)

核心数据要求您创建映射模型,以便从当前版本的数据存储转到最新版本的数据存储。这意味着你需要制作一个来自v1 - > v2和v2 - > v3和v1 - > V3。

来自核心数据版本控制和迁移指南

  

尝试查找从托管对象模型映射的映射模型   对于现有商店,持久性商店使用的商店   协调。核心数据搜索您的应用程序的资源   可用的映射模型和测试依次。如果找不到   一个合适的映射,核心数据返回NO和一个合适的错误。

     

请注意,您必须已创建合适的映射模型   这个阶段要成功。

正如本Apple文档中所述 Core Data Mapping

答案 1 :(得分:1)

您可以实施渐进式数据迁移。在此处http://media.pragprog.com/titles/mzcd/code/ProgressiveMigration/AppDelegate.m

中查找渐进式MikraUR

答案 2 :(得分:-1)

progressiveivelyMigrateURL 是一个很好的示例,但我不认为你真的需要它,因为只要你开发应用程序就会出现你的文档版本,所以每当你需要尽可能多的映射模型时支持的数据模型版本减去一个而不是更多(例如,您不需要app1.0_to_app1.1.xcmappingmodel作为1.1版本不再是最新版本)。每次创建新版本时,您只需在每个映射模型中更正目标模型,并在需要时再添加一个,可能需要生成新模型并删除旧模型。事实上,在一个阶段中迁移(不会强制您创建与渐进式映射模型相比更多的映射模型)在运行时会快得多,您可能会注意到这一点。 您也不需要为简单的案例创建映射模型,也可以使用轻量级迁移(如果具体情况需要在运行时无法生成的映射模型,则使用默认迁移过程(当然,您需要在应用程序中使用它) bundle))或借助于inferMappingModelForSourceModel:destinationModel:error:NSMappingModel类的方法,在运行时创建的映射模型的帮助下进行迁移,然后根据需要在代码中自定义(在这种情况下,您需要手动触发迁移)调用migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:据我所知,NSMigrationManager实例的方法)。 祝你好运!