我们在开发或者产品升级的时候经常会遇到托管模型的结构化修改(也就是表的结构改变),那么我们就需要数据迁移到新的模型中。
- 轻量级迁移方式
- 默认的迁移方式
- 迁移管理器迁移方式
现在记录一下轻量级迁移。
轻量级数据迁移适合一下情况:
- 增加一个字段
- 必填字段改为可选字段
- 可选字段改为必填字段(设定默认值)
前提:首先有一个CoreData操作例子。下载
重点:如果运行程序报错:the model used to open the store is incompatible with the one used to create the store. 请点击Xcode 顶部菜单Product -》Clean 。
1.轻量级迁移方式
下载上面例子:我们先来运行程序来插入数据。(创建完成的sqlite文件在 /Documents/Stores/CoreData.sqlite)。
插入完成后使用Navicat 或者其他sqlite数据库可视化程序查看里面的数据。
上面结束后我们来修改表结构。
基于CoreData创建CoreDate 2版本 点击Finish
现在出现了两个.xcdatamaodel文件。
添加字段完成后 设置当前数据版本为CoreData 2。
现在我们还需要将原来Entity1的表结构生成的Entity1.h、 Entity1.m、Entity1+CoreDataProperties.h、Entity1+CoreDataProperties.m替换成新的。
将原来的这四个文件直接删除,然后再创建新的就可以了
好了!准备就绪 。
我们来设置轻量级迁移参数:
NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@(YES),
NSInferMappingModelAutomaticallyOption:@(YES)};
好的 现在就已经完成了。下面我们来测试一下。
我们来查询一下新的表结构中是否有数据。
看样子是已经成功了。