登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

iOS CoreData (二) 版本升级和数据库迁移

[复制链接]
来自: wsl2ls 分类: iOS精品源码 上传时间: 2018-3-7 17:06:03
Tag:

项目介绍:

前言:最近ChinaDaily项目需要迭代一个新版本,在这个版本中CoreData数据库模型上有新增表、实体字段的增加,那么在用户覆盖安装程序时就必须要进行CoreData数据库的版本升级和旧数据迁移,如果仅仅是在旧版本的数据模型上进行上述操作,就会造成所有旧用户更新完成后的第一次启动崩溃。

  • 数据迁移的方式有好几种,这里就先介绍我用的轻量级的数据迁移方式:Core Data轻量级迁移是适用于添加新表,添加新的实体,添加新的实体属性,等简单的,系统能自己推断出来的迁移方式。

接下来在我之前写的 iOS CoreData (一) 增删改查 示例基础上进行演示:

1、新建一个版本的数据库模型Model2:

 * 选中Model.xcdatamodeld文件,选择菜单editor->Add Model Version  取名为:Model2.xcdatamodel,然后就可以发现Model.xcdatamodeld目录下有两个版本的数据库模型

add model version.gif

2、设置当前coreData的数据模型为Model2:
  •  选中Model.xcdatamodel或Model2.xcdatamodel,在左侧的Model Version 中选择Current模版为Model2

设置当前数据库版本.gif

3、修改新数据模型Model2,在Model2上添加字段及表:
  • 从第2步 演示图中可以看到旧Model中的表和实体属性都自动迁移到了Model2中,新的表和实体属性我们可以直接在Model2上操作创建,但是别忘了删除原来的类文件,重新生成下新的实体类:

修改新数据模型Model2.gif

4、设置数据库参数options,打开数据库升级迁移的开关。
  •   把方法- (nullable __kindof NSPersistentStore )addPersistentStoreWithType:(NSString )storeType configuration:(nullable NSString )configuration URL:(nullable NSURL )storeURL options:(nullable NSDictionary )options error:(NSError *)error中的options参数置为如下的options字典


 //创建持久化存储助理:数据库

 NSPersistentStoreCoordinator * store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

//请求自动轻量级迁移

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:

                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,

                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,

                             nil];

   NSError *error = nil;

    //设置数据库相关信息 添加一个持久化存储库并设置存储类型和路径,NSSQLiteStoreType:SQLite作为存储库

    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:options error:&error];

这里说一下新增加的2个参数的意义:

NSMigratePersistentStoresAutomaticallyOption = YES,那么Core Data会试着把之前低版本的出现不兼容的持久化存储区迁移到新的模型中,这里的例子里,Core Data就能识别出是新表,就会新建出新表的存储区来。

NSInferMappingModelAutomaticallyOption = YES,这个参数的意义是Core Data会根据自己认为最合理的方式去尝试MappingModel,从源模型实体的某个属性,映射到目标模型实体的某个属性。

之前相关文章:iOS CoreData (一) 增删改查

赞赞.gif

相关源码推荐:

我来说两句
*滑动验证:
所有评论(71)
逆鳞九霄 2018-3-8 10:41:50
楼主用心了,内容非常精彩。
回复
op568f 2018-3-8 10:42:07
小弟学习了~支持,支持
回复
t8569 2018-3-8 10:42:15
写的真的很不错
回复
Yf8546 2018-3-8 10:42:25
感谢大神分享,必须顶!
回复
A7472 2018-3-8 10:42:34
mark,收藏了
回复
kengsir 2018-3-8 10:42:43
感谢大神分享,必须顶!
回复
一人无 2018-3-8 10:42:51
支持,感谢,祝code4app越来越好~
回复
code4app热心网友 2018-3-8 13:11:51
很给力,Code4App有你更精彩!
回复
code4app热心网友 2018-3-8 14:30:00
淡定,淡定,淡定……
回复
提取码:  下载次数:40 状态:已购或VIP 售价:0(原价:15)金钱 下载权限:初级码农 
938 2 40
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表