CoreData(数据库升级 )版本迁移-iOS App升级安装

版权声明:本文为博主原创文章,未经博主允许不得转载。

如果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/

注意:这是个人习惯操作,仅供参考,如有错误,请留言指出。

时间: 2024-10-13 18:48:33

CoreData(数据库升级 )版本迁移-iOS App升级安装的相关文章

MSSQL数据库高版本迁移到低版本

起因是因为客户要把系统从阿里云迁移到本地服务器,阿里云上的数据库版本是MSSQL2016,客户提供的服务器是Server2008R2的,问题就来了,Server2008不支持2016版本,最后只能装的2012版本,那就需要从2016迁移到2012. 过程是一波三折,网上流传选择一下兼容模式,如下图 然后再去备份,不知道别人是怎么成功的或者是他们自己也没有成功,我反正最后还是报错,低版本不支持高版本. 最后没本法只能采用生成架构跟数据的脚本来进行导入了 好吧,好在我们数据量还不是很大,sql文件导

怎么下载旧版本的iOS app

How to download older versions of iOS apps Charles Proxy is a tool for OS X that can be used to facilitate the download of older versions of iOS apps from iTunes. It's a bit of a drawn-out exercise, but if you've ever been in need of an older version

iOS App初始化或者升级,涉及本地数据库迁移的问题

总体思路 一般app启动之后,都有一个初始化的过程.此外后续app升级,还需要考虑数据迁移.所以初始化和数据迁移的框架,在初期的版本就要考虑好 总结一下我们的app采取的方案: 1.在持久化的文件夹内(比如UserDefaults或者Documents目录),用一个字段保存老版本号 2.在开始初始化之前,读取老版本号,以及当前版本号 3.如果该应用是第一次加载,那么老版本号就取不到(因为是初次加载,这个字段还没有保存),那么就可以执行初始化过程:如果取到了老版本号,就不执行初始化 4.初始化完成

iOS coredata 数据库升级 时报Can't find model for source store

在coredata 数据库结构被更改后,没根据要求立即建立新version,而是在原version上进行了小修改,之后才想起来建立新版本.并通过以下代码合并数据库, NSError *error = nil; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,

CoreData数据库版本迁移--干货

CoreData使用的是第三方库MagicRecord. 版本不断覆盖时需要对数据库进行迁移,经过不断打包测试,发现以下规律: a.表中增加模型,覆盖安装后上一个版本表中数据无法再取出 b.A模型中新增加字段,覆盖安装后,访问A模型数据,程序闪退,必须删除以前版本重新安装,才能正常访问表中A模型的字段 c.A模型中删除字段,覆盖安装后,对应用无影响 所以,只要数据库表中有增加删除模型,模型增加字段等,都需要先做好版本迁移工作.具体步骤如下: 1.选中当前CoreData的工作表(LearnDri

IOS APP 升级流程

1.Itunes connect 2.登录 3.Manage your apps 4.点击要升级的图标 5.Add version(右侧) 6.填写版本号和描述.(在商店里给用户看) 7.Ready to  upload bineary 8.选择no选项,一直下一步 9.Automaitically release~~~~----->save 10.打开程序,选择info.list.更改版本号 Bundleversions string short 和 Bundle version 都改成要升级

【升级至sql 2012】sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611。请将该数据库升级为最新版本。)

sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611.请将该数据库升级为最新版本.) 最近工作中有一个sqlserver2005版本的mdf文件,还没有log文件,现在需要 附加到sqlserver2012,经过网上一顿搜索,把完整的过程奉上,供大家参考 首先创建数据库 再设置数据库的兼容性(经过尝试,此步骤可以省略) 停掉sqlserver 服务,将需要附件的mdf文件替换掉创建数据生成的mdf,删除掉对应的ldf文件 再启动sqlserver 服务 执行

IOS中如何判断APP是否安装后首次运行或升级后首次运行

对于是否为首次安装的App可以使用如下方法来判断 [[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]; 如果App是通过App Store升级的话可以通过版本号来判断 [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 实际使用可以在didFinishLaunchingWithOptions:

ios app初始化和数据迁移的设计思路

整体思路 一般app启动之后,都有一个初始化的过程. 此外兴许app升级,还须要考虑数据迁移.所以初始化和数据迁移的框架.在初期的版本号就要考虑好 总结一下我们的app採取的方案: 1.在持久化的文件夹内(比方UserDefaults或者Documents文件夹),用一个字段保存老版本 2.在開始初始化之前,读取老版本.以及当前版本 3.假设该应用是第一次载入,那么老版本就取不到(由于是初次载入,这个字段还没有保存),那么就能够运行初始化过程.假设取到了老版本.就不运行初始化 4.初始化完毕之后