CoreData版本迁移(一)

来源:互联网 发布:编程助手 编辑:程序博客网 时间:2024/05/22 03:35

轻量级迁移

符合下面情况的数据迁移为轻量级迁移:

1.添加、删除实体

2.修改原有实体的属性(增加、删除、修改)


适用场景:在版本迭代中为了满足新需求数据库的表结构可能会发生改变,这时就需要一个新的表结构来替换旧的表结构,但是如果直接在原有的可视化托管对象模板模型(Model.xcdatamodeld)上修改会导致应用崩溃(原因在最后的说明解释)。

迁移步骤:

1.选中Model.xcdatamodeld模型文件,点击上方菜单栏的Editor,在列表里选Add Model Version选项,


并在弹出的对话框中有新模型模板名字和基于某个旧版本模型模板的选项,填写/选择后点击右下角Finish,新模型模板就创建好了。



2.当新的模型模板创建成功后,会在Model.xcdatamodeld列表中会显示新的模型模板文件,选中新的模板就可以在里面根据新的需求修改实体、属性了。


3.为了让CoreData使用新的模板还需要修改当前模板版本,操作如下图:

选中Model.xcdatamodeld,在模型文件的Inspector列表的下方找到Model Version选项,在Current列表中选择刚创建的模型文件。



4.修改加载Store的代码,在原来的options字典添加两组Key-Value(这两对Key-Value的作用见下方的说明):

(1)NSMigratePersistentStoresAutomaticallyOption:@YES

(2)NSInferMappingModelAutomaticallyOption:@YES


做到这,再运行一遍程序,轻量级数据迁移就完成了。

说明:

1.直接修改原有的表结构运行程序崩溃原因:

在你修改完原有的模型模板结构后重新运行程序加载持续化存储区(store)时,系统会默认用新模板(修改过的模板)去打开原有的存储区,而原有的存储区是通过旧模板模型创建的,从而导致系统错误导致崩溃。

2.两对Key-Value的作用:

(1)NSMigratePersistentStoresAutomaticallyOption:@YES,这组Key-Value的作用是当你修改了托管对象模型模板,CoreData会自动试着将旧版本的持久化存储区迁移到最新版的模型中。

(2)NSInferMappingModelAutomaticallyOption:@YES,这组Key-Value的作用是自动推断映射模型,当你选用新的模板后,CoreData会去自动推断原有的模型实体中的属性会对应于新模型实体中的哪一个属性(映射)。如果Value为NO,CoreData不会去自动推断,而新模板的实体对于旧模板的实体已经有改动了,但CoreData还是会默认新模板上的实体和旧模板的上的实体一一对应,结果映射不上,导致系统错误造成崩溃。


0 0
原创粉丝点击