app中使用了CoreData,并且在下一个版本中有实体变动,比如实体新增字段、修改字段等改动,
那么app在覆盖安装时就要进行数据库迁移,
否则app就会crash。
那如何实现数据库迁移呢?大概需要这几个步骤:
1. 选中你的CoreData.xcdatamodeld文件,选择Xcode菜单editor->Add Model Version 比如取名:mydata2.xcdatamodel
![](http://upload-images.jianshu.io/upload_images/1940819-220c9c8eda7c870f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/408)
截图.png
![](http://upload-images.jianshu.io/upload_images/1940819-99172503f3581142.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000)
截图.png
2. 起一个名字,也就是当前新版本CoreData文件的名字。然后点击确认。
![](http://upload-images.jianshu.io/upload_images/1940819-de057fddcfecb4e0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000)
新的CoreData名字
3. 这时候会发现CoreData.xcdatamodeld中多了一个版本文件。如图:
![](http://upload-images.jianshu.io/upload_images/1940819-2fd26fe7e1cd6a89.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/534)
96780DBF-2880-429C-ABE4-405A844D9ABB.png
4.选择刚才创建的版本,在inspector中的Versioned Core Data Model选择Current模版为CoreData2
![](http://upload-images.jianshu.io/upload_images/1940819-5e2046a7d9795859.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000)
截图
5. 修改新数据模型CoreData2,在新的文件上添加属性和修改实体。
6. 删除原来的实体文件,重新生成下的类。
![](http://upload-images.jianshu.io/upload_images/1940819-f1fad076d54220b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/432)
删除实体类文件,重新生成新的类文件
7. 在persistentStoreCoordinator中添加代码:
![](http://upload-images.jianshu.io/upload_images/1940819-ca869459683b39f9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000)
添加代码
8. 重新编译运行就OK了。
PS: Xcode8 系统CoreData类做了不少改动,当然使用起来更简单了,如果您是用Xcode8创建的工程实现版本升级和数据迁移,则直接修改实体,然后重新生成即可,非常简单。具体使用和代码见https://github.com/qindeli/XCode8-CoreData-/tree/master/TestCoreData.