首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS CoreData (二) 版本升级和数据库迁移

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

原创
作者头像
且行且珍惜_iOS
发布2018-05-22 14:53:15
1.3K0
发布2018-05-22 14:53:15
举报

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

  • 数据迁移的方式有好几种,这里就先介绍我用的轻量级的数据迁移方式:Core Data轻量级迁移是适用于添加新表,添加新的实体,添加新的实体属性,等简单的,系统能自己推断出来的迁移方式。 接下来在我之前写的 iOS CoreData (一) 增删改查 示例基础上进行演示:1、新建一个版本的数据库模型Model2:
  • 选中Model.xcdatamodeld文件,选择菜单editor->Add Model Version 取名为:Model2.xcdatamodel,然后就可以发现Model.xcdatamodeld目录下有两个版本的数据库模型
    add model version.gif
    add model version.gif
    odel2:
  • 选中Model.xcdatamodel或Model2.xcdatamodel,在左侧的Model Version 中选择Current模版为Model2
    设置当前数据库版本.gif
    设置当前数据库版本.gif
    l2,在Model2上添加字段及表:
  • 从第2步 演示图中可以看到旧Model中的表和实体属性都自动迁移到了Model2中,新的表和实体属性我们可以直接在Model2上操作创建,但是别忘了删除原来的类文件,重新生成下新的实体类:
    修改新数据模型Model2.gif
    修改新数据模型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,从源模型实体的某个属性,映射到目标模型实体的某个属性。

5、编译结束,CoreData调试:

打开Product,选择Edit Scheme.

选择Arguments,在下面的ArgumentsPassed On Launch中添加下面两个选项,如图:

(1)-com.apple.CoreData.SQLDebug

(2)1

CoreData调试.png
CoreData调试.png

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

赞赞.gif
赞赞.gif

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4、设置数据库参数options,打开数据库升级迁移的开关。
  • 5、编译结束,CoreData调试:
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档