多个版本的 xcdatamodel 是不是意味着我们需要多个 xcmapingmodel 文件?
Posted
技术标签:
【中文标题】多个版本的 xcdatamodel 是不是意味着我们需要多个 xcmapingmodel 文件?【英文标题】:Do multiple versions of xcdatamodel mean that we need multiple xcmappingmodel files?多个版本的 xcdatamodel 是否意味着我们需要多个 xcmapingmodel 文件? 【发布时间】:2012-02-06 15:35:50 【问题描述】:我有多个版本的 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?)
谢谢!
【问题讨论】:
【参考方案1】:Core Data 要求您创建一个映射模型以从当前版本的数据存储转到最新版本的数据存储。这意味着您需要制作一个从 v1 -> v2 和 v2 -> v3 和 v1 -> v3 开始的版本。
来自核心数据版本控制和迁移指南
尝试查找从托管对象模型映射的映射模型 对于现有存储到持久存储正在使用的存储 协调员。 Core Data 搜索应用程序的资源 依次获取可用的映射模型和测试。如果找不到 一个合适的映射,Core Data 返回 NO 和一个合适的错误。
请注意,您必须已创建合适的映射模型才能 这个阶段要成功。
如本 Apple 文档中所述 Core Data Mapping
【讨论】:
【参考方案2】:您可以实施渐进式数据迁移。在此处http://media.pragprog.com/titles/mzcd/code/ProgressiveMigration/AppDelegate.m
中查找 progressivelyMigrateURL【讨论】:
【参考方案3】:progressivelyMigrateURL 是一个很好的示例,但我认为您实际上并不需要它,因为只要您开发应用程序就会出现文档版本,因此每次您需要尽可能多的映射模型数据模型支持的版本数减一而不是更多(例如,您不需要 app1.0_to_app1.1.xcmapingmodel,因为 1.1 版本不再是最新版本)。每次创建新版本时,您只需在您拥有的每个映射模型中纠正一个目标模型,并在需要时再添加一个,但也许您需要生成新版本并删除旧版本。事实是,您可能会注意到,在一个阶段中的迁移(与渐进式相比,它不会强迫您创建更多的映射模型)在运行时要快得多。 您也不需要为琐碎的情况创建映射模型,也不需要使用轻量级迁移(如果具体情况需要一个无法在运行时生成的映射模型,请使用默认迁移过程(当然,您需要在您的应用程序中拥有它) bundle)) 或借助 inferredMappingModelForSourceModel:destinationModel:error: NSMappingModel 类的方法在运行时创建的映射模型进行迁移,然后在需要时在代码中进行自定义(在这种情况下,您需要手动触发迁移据我了解,调用 migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error: NSMigrationManager 实例的方法)。 祝你好运!
【讨论】:
以上是关于多个版本的 xcdatamodel 是不是意味着我们需要多个 xcmapingmodel 文件?的主要内容,如果未能解决你的问题,请参考以下文章
对如何设置我的 .xcdatamodel 进行版本控制感到困惑