2

我有多个版本的 xcdatamodel 文件:

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

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

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?)

谢谢!

4

3 回答 3

4

Core Data 要求您创建一个映射模型以从当前版本的数据存储转到最新版本的数据存储。这意味着您需要制作一个从 v1 -> v2 和 v2 -> v3 和 v1 -> v3 开始的版本。

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

尝试找到从现有存储的托管对象模型映射到持久存储协调器正在使用的映射模型。Core Data 在您的应用程序资源中搜索可用的映射模型并依次测试每个模型。如果找不到合适的映射,Core Data 会返回 NO 和合适的错误。

请注意,您必须创建合适的映射模型才能使此阶段成功。

如本 Apple 文档中所讨论的 核心数据映射

于 2012-02-06T21:06:31.360 回答
1

您可以实施渐进式数据迁移。在这里 寻找progresslyMigrateURL http://media.pragprog.com/titles/mzcd/code/ProgressiveMigration/AppDelegate.m

于 2012-10-31T10:35:08.387 回答
-1

渐进式迁移URL是一个很好的示例,但是我认为您实际上并不需要它,因为只要您开发应用程序就会出现文档版本,因此每次您需要的映射模型与数据模型支持的版本数减一时一样多,并且不多(例如,您不需要 app1.0_to_app1.1.xcmapingmodel,因为 1.1 版本不再是最新版本)。每次创建新版本时,您只需要更正您拥有的每个映射模型中的目标模型,并在需要时再添加一个,但也许您需要生成新版本并删除旧版本。事实是,您可能会注意到,在一个阶段中的迁移(与渐进式相比,它不会强迫您创建更多的映射模型)在运行时要快得多。你也不 不需要为琐碎的情况创建映射模型并使用轻量级迁移(如果具体情况需要一个无法在运行时生成的映射模型(当然你需要在你的应用程序包中拥有它),请使用默认迁移过程代替)或借助 NSMappingModel 类的 inferredMappingModelForSourceModel:destinationModel:error: 方法在运行时创建的映射模型进行迁移,然后在需要时在代码中自定义(在这种情况下,您需要通过调用 migrateStoreFromURL 手动触发迁移: type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error: 据我了解的 NSMigrationManager 实例的方法)。祝你好运!

于 2013-01-11T06:51:17.003 回答