什么时候要数据迁移
app中使用了CoreData,并且在下一个版本中有实体变动,比如实体新增字段、修改字段等改动,那么app在覆盖安装时就要进行数据库迁移
用上篇文章的数据文件作例子
image.png- 假设我们要添加一张表,我们就要做一次数据迁移,不是直接在xcdatamodeld文件添加一个实体就行了,因为你底层的SQLite数据库已经在上次运行的时候就创建了一个数据库,已经是有Student和Course表了,你在xcdatamodeld文件添加实体并不会让底层数据库多出一张表,xcdatamodeld文件只是一个底层数据库的映射,因此数据迁移并不是在原来的xcdatamodeld文件上改动
就以截图为例子,假如我们要再创建一个Score实体,我们要怎么做
-
首先选中文件
名字你喜欢,这里就是Model 2
image.png
-
选择刚创建的版本,在这个位置成现在的文件名字,即Model 2
-
在新的数据文件添加Score实体
-
注意如果是添加实体就重新生成新添加的实体的模型类,不选另两张表,像这样
image.png
-
如果是新添加了某个实体的属性,比如Student实体添加了个sex的属性,那就把Student实体模型类删了,再生成一次
-
最后一步就是要在创建数据库的代码上作小小的修改
NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@YES,NSInferMappingModelAutomaticallyOption:@YES};
这里说一下新增加的2个参数的意义:NSMigratePersistentStoresAutomaticallyOption = YES,那么Core Data会试着把之前低版本的出现不兼容的持久化存储区迁移到新的模型中,这里的例子里,Core Data就能识别出是新表,就会新建出新表的存储区来。NSInferMappingModelAutomaticallyOption = YES,这个参数的意义是Core Data会根据自己认为最合理的方式去尝试MappingModel,从源模型实体的某个属性,映射到目标模型实体的某个属性
-
结束
网友评论