版权声明:本文为博主原创文章,未经博主允许不得转载。
如果IOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表、字段等操作),那在覆盖安装程序时就要进行CoreData数据库的迁移,具体操作如下:
1.选中你的mydata.xcdatamodeld文件,选择菜单editor->Add Model Version 比如取名:mydata2.xcdatamodel
2.设置当前版本
选择上级mydata.xcdatamodeld ,在inspector中的Versioned Core Data Model选择Current模版为mydata2
3.修改新数据模型mydata2,在新的文件上添加字段及表
4.删除原来的类文件,重新生成下类。
在appdelegate中
首先说明:我的 "CoreData_New.xcdatamodeld"---实体模型已经被我从Model.xcdatamodeld迁移到了Model2.xcdatamodeld,现在我想迁移到Model3.xcdatamodeld
开始操作之前如图:
具体操作如下:
第一步:选中原版本操作如图
第二步:选中Add Model Version。。。,会出现下图
注意:你会看到,你新建的实体模型文件会依据你的上一个版本新建的。如果前面有很多版本,请选择你想哪一个依据哪一个新建,选上默认的上一个就可以了,不然你选上更早的版本,数据肯定会丢失
第三步:点击完成会现在下图新的实体模型 Model3.xcdatamodeld,里面的数据会跟原来那个一模一样
第四步:现在就可以进行你的数据对象操作了,具体数据这里就不进行操作了
第五步:现在我们进行选择迁移后的版本,进入下图第一个界面,点开Model Version,里面会有你以前的版本,选择你修改了数据的新版本即可
第六步:选好之后,如下图效果
第七步:现在进行代码操作
1,options系统默认的options是nil,点击去API发现是个字典,所以我们需要创建一个字典对象
我再细化点:进去API之后再COMMAD+F在搜索栏输入autom
2,选择一直enter键,找到如下图
第八步:代码如下图
第九步:按照上图修改代码即可,完成,运行成功。
其他补充,
CoreData中使用的几个类。
(1)NSManagedObjectModel(被管理的对象模型)
相当于实体,不过它包含 了实体间的关系
(2)NSManagedObjectContext(被管理的对象上下文)
操作实际内容
作用:插入数据 查询 更新 删除
(3)NSPersistentStoreCoordinator(持久化存储助理)
相当于数据库的连接器
(4)NSFetchRequest(获取数据的请求)
相当于查询语句
(5)NSPredicate(相当于查询条件)
(6)NSEntityDescription(实体结构)
(7)后缀名为.xcdatamodel的包
里面的.xcdatamodel文件,用数据模型编辑器编辑
编译后为.momd或.mom文件,这就是为什么文件中没有这个东西,而我们的程序中用到这个东西而不会报错的原因
注意:coreData是对象关系型数据库,最大的缺点是线程关系,可以以二进制、数据库、XML格式存储,可以有版本迁移,这个比SQL好,SQL是数据库存储,对象型数据库
"CoreData_New.xcdatamodeld"---实体模型文件
SQL 给的是字符串,CoreData给的是URL
/**coreDta步骤
* 1 创建文件模型文件
* 2 添加实体
* 3 创建实体类
* 4 生成上下文,并联数据模型,生成数据库
*
注意:coreData是对象关系型数据库,最大的缺点是线程关系,可以以二进制、数据库、XML格式存储,可以有版本迁移,这个比SQL好,SQL是数据库存储,对象型数据库
"CoreData_New.xcdatamodeld"---实体模型文件
SQL 给的是字符串,CoreData给的是URL
*/
其他:下图感谢博主分享:http://mrydblog.com/
注意:这是个人习惯操作,仅供参考,如有错误,请留言指出。