Core Data 支持随着app开发演进而带来的对象模型(managed object model)升级或修改的管理。模型的改变将导致不兼容(或不能打开)以前版本创建的存储。如果你要改变你的模型,你就必须要改变现有存储中的数据-也就是数据存储格式(store format)-这被称为迁移(migration)。
要想迁移数据,你既需要原始版本,又需要当前版本。因此,需要创建 带版本的模型(versioned model),带版本的模型(像版本仓库)可以存储下多个版本。如果没有问题的话,Core Data 可以使用当前新版本打开以前版本创建的数据存储,并将其迁移至当前版本规范中。因此,为了帮助 Core Data 迁移,需要我们提供新旧版本间的映射信息(map),映射信息有两种方式,一是简单根据版本号,二是创建独立的映射模型文件(separate mapping model file)。
通常程序版本改变,会涉及到很多方面,Core Data 没有能力为我们自动处理,但提供了一些技术为我们所用:
-
模型版本管理,方便区分不同阶段的不同版本。
模型版本,有两个视角,以程序员看,就是版本号(文字本身);从 Core Data角度看,就是另一回事,具体看 “Understanding Versions.”
带版本的对象模型文件格式和如何添加版本号,参见 “Model File Format and Versions.”
-
映射方式选择(表和字段/实体和属性)
简单情况下,Core Data 可以推测出(infer)如何映射,具体见“轻量级数据迁移” “Lightweight Migration.”
如果复杂了,Core Data 无法推测,我们必须创建映射模型(mapping model),通过映射模型,表述如何转换(从旧版本到新版本),创建方法见 “Mapping Overview.”
-
数据迁移的过程参见 “The Migration Process.”,如何执行具体的迁移参见 “Initiating the Migration Process.”
可以定制迁移过程,如决定是否有必要进行迁移(if-else)、如何找到正确的源模型和目标模型(correct source and destination models)及正确的映射模型。
如果你要自己初始化迁移过程,那你只能自定迁移过程,比如,在主文件夹(main bundle)之外的位置搜索,或者,利用多个映射模型执行几个阶段的迁移,也可能在大数据集基础上处理。自定迁移过程参见 “Customizing the Migration Process.”
-
使用了 iCloud 的App,只能执行轻量级迁移,具体参 “Migration and iCloud.”
尽管可以轻松完成,但还需谨慎,避免冲突。