Core Data的数据迁移

什么时候要数据迁移

app中使用了CoreData,并且在下一个版本中有实体变动,比如实体新增字段、修改字段等改动,那么app在覆盖安装时就要进行数据库迁移

用上篇文章的数据文件作例子

Core Data的数据迁移_第1张图片
image.png
  • 假设我们要添加一张表,我们就要做一次数据迁移,不是直接在xcdatamodeld文件添加一个实体就行了,因为你底层的SQLite数据库已经在上次运行的时候就创建了一个数据库,已经是有Student和Course表了,你在xcdatamodeld文件添加实体并不会让底层数据库多出一张表,xcdatamodeld文件只是一个底层数据库的映射,因此数据迁移并不是在原来的xcdatamodeld文件上改动

就以截图为例子,假如我们要再创建一个Score实体,我们要怎么做


  • 首先选中文件

Core Data的数据迁移_第2张图片
image.png

Core Data的数据迁移_第3张图片
名字你喜欢,这里就是Model 2

Core Data的数据迁移_第4张图片
image.png
  • 选择刚创建的版本,在这个位置成现在的文件名字,即Model 2

Core Data的数据迁移_第5张图片
image.png
  • 在新的数据文件添加Score实体

Core Data的数据迁移_第6张图片
image.png
  • 注意如果是添加实体就重新生成新添加的实体的模型类,不选另两张表,像这样

Core Data的数据迁移_第7张图片
image.png

Core Data的数据迁移_第8张图片
image.png
  • 如果是新添加了某个实体的属性,比如Student实体添加了个sex的属性,那就把Student实体模型类删了,再生成一次

Core Data的数据迁移_第9张图片
这四个删了,怎么删除实体模型类就不用教了
  • 最后一步就是要在创建数据库的代码上作小小的修改

Core Data的数据迁移_第10张图片
这是原来的代码
Core Data的数据迁移_第11张图片
修改后
NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@YES,NSInferMappingModelAutomaticallyOption:@YES};

这里说一下新增加的2个参数的意义:NSMigratePersistentStoresAutomaticallyOption = YES,那么Core Data会试着把之前低版本的出现不兼容的持久化存储区迁移到新的模型中,这里的例子里,Core Data就能识别出是新表,就会新建出新表的存储区来。NSInferMappingModelAutomaticallyOption = YES,这个参数的意义是Core Data会根据自己认为最合理的方式去尝试MappingModel,从源模型实体的某个属性,映射到目标模型实体的某个属性

  • 结束

你可能感兴趣的:(Core Data的数据迁移)