Coredata的版本升级

来源:互联网 发布:矢量图网上制作软件 编辑:程序博客网 时间:2024/05/18 02:30

在开发的后期,可能因为完善和修复功能,需要对Coredata数据库表进行修改,这样就需要对CoreData进行版本升级。

 比如你修改了DB字段以后,用户在旧版本上升级为新版本时会crash. 因为升级只升级了应用app,没有升级目录下的数据据db文件。在开发当中,只需要删除了app再重新安装一次就可以解决了。如果是上传到appstore的软件,那你可要小心处理了,没有经过整合migrate处理的app,用户升级后必然会crash.这时就需要用到Coredata的升级处理了。 版本升级步骤:

一、1.新建模型版本 (选中可视化建模文件, 点击editor, 选择addModelVersion)

这里写图片描述

这里写图片描述

二、把当前新建的模型版本设置成选中状态,选择为当前版本 (先选中总的模型版本, 然后在属性检查器中的第一个标签有个current,选中新建的即可)

这里写图片描述

这里写图片描述

三、删除旧的映射文件类,重新创建新映射文件(cmd + n , 在coreData选项卡中, 选择NSManageObject subclass), 记住创建时选择新的model.(因为类的属性都变了,所以要生成新的关联类)

这里写图片描述

四、在生成NSManageObjectContext时,把数据连接器persistentStoreCoordinator中的懒加载方法中, option选项由nil变成一个字典, key为NSMigrate, value为@{YES}, 该选项的意思是, 模型版本自动升级 (数据库升级)

NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES];//添加的字典if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType                                                     configuration:nil                                                            URL:storeUrl                                                       options:optionsDictionary                                                            error:&error]) {  } //添加 *optionsDictionary,原来options:nil  改成options:optionsDictionary 

重新编译一下。你可以进入沙盒打开表文件,你会发现,如果是以前的数据,新加的属性字段都为空。这样,你上架更新后都不会因为数据原因造成崩溃,而且也不会把以前的数据弄丢。是不是也插简单的啊?

1 0
原创粉丝点击