记录一下,这个错误通常是我们修改了DataModel文件,增加了新的Entity,包括Attribute属性、Relationship关系等等导致的
![](https://img.haomeiwen.com/i3121809/9d4f1c914e4c1aaf.png)
解决方法:一.Core Data自带的轻量级的数据迁移
错误原因写的比较清楚了,reason=The model used to open the store is incompatible with the one used to create the store,这个是因为我新建了一张表,但是我没有打开轻量级的迁移Option。这里会有人会问了,我新建表从来没有出现这个错误啊?那是因为你们用的第三方框架就已经写好了改Option了。(场外人:这年头谁还自己从0开始写Core Data啊,肯定都用第三方框架啊)那这里我就当讲解原理了哈。如果是自己从0开始写的Core Data的话,这里是应该会报错了,解决办法当然是加上代码,利用Core Data的轻量级迁移,来防止这种找不到存储区的闪退问题
![](https://img.haomeiwen.com/i3121809/bd31a3c615b03e58.png)
解决方法:二.Core Data手动创建Mapping文件进行迁移
1.创建一个模型版本1
![](https://img.haomeiwen.com/i3121809/f3ed56548c0de1df.png)
2.创建Mapping文件进行迁移
![](https://img.haomeiwen.com/i3121809/f04d565f6e9b60c8.png)
![](https://img.haomeiwen.com/i3121809/679e54975a908fec.png)
选择需要Mapping的源数据库
![](https://img.haomeiwen.com/i3121809/d6ac432d149c1904.png)
再选择目标数据库
![](https://img.haomeiwen.com/i3121809/2e10be8082bc2803.png)
接着命名一下Mapping Model文件的名字
这里说明一下,名字最好能一眼看上去就能区分出是哪个数据库的版本升级上来的,这里我写的就是ModelV0ToV1,这样一看就知道是V0到V1的升级。
![](https://img.haomeiwen.com/i3121809/cc515db70dd73088.png)
这里说明一下Mapping文件的重要性,首先,每个版本的数据库之间都最好能加上一个Mapping文件,这样从低版本的数据库升级上来,可以保证每个版本都不会出错,都不会导致用户升级之后就出现闪退的问题。
迁移代码:
![](https://img.haomeiwen.com/i3121809/fd0a9cb5d0a13605.png)
这是我简单封装 的coredata单利
GmDataManager.m
![](https://img.haomeiwen.com/i3121809/ce6d89361ce84b48.png)
![](https://img.haomeiwen.com/i3121809/c5b2ac3a8c73c7f3.png)
GmDataManager.h
![](https://img.haomeiwen.com/i3121809/29f76952c23c682c.png)
网友评论