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

  1. NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],
  2. NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES],
  3. NSInferMappingModelAutomaticallyOption, nil];
  4. if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
  5. configuration:nil
  6. URL:storeUrl
  7. options:optionsDictionary
  8. error:&error]) {
  9. NSLog(@"failed to add persistent store with type to persistent store coordinator");
  10. }

添加 *optionsDictionary,原来options:nil  改成options:optionsDictionary

5.重新编译下程序。

[原]iOS 升级程序中已有的CoreData

2013-12-4阅读586 评论0

也许在开发某个应用的1.0版本时,使用了CoreData。然后在2.0版本的时候,需要对CoreData做些修改。可能是增加一个实体(NSEnttity),可能是增加实体的属性(Property),或者创建删除实体间的关系(Relationship)等等。都需要对CoreData的结构做出修改。总结一下这部分知识。

创建一个使用CoreData的程序,勾上use arc选项。创建一个Sudent实体,其有两个属性,分别是name(NSString类型)和age(NSString类型)。效果如下图所示:

创建好之后,选中Studnet 实体,command + N,创建实体对应的对象。为了方便查看效果,创建如下图所示ui并关联了插入数据和打印数据的方法。

关联的方法如下图所示,简单的插入和打印CoreData里面的数据。

运行一下,先点“insert”,然后点“print”,看是否有数据打印。一切都可以运行,程序没有crash。好了,现在有个需求,是删除Student(实体)的age属性。下一步,决对不能对现有的model文件直接进行删除student的age操作。否则,再次运行coredata的时候,程序就会crash掉。

需要做的是:

 * 选中后缀是xcdatamodel的文件,Editor -> Add Model Vision - > finish 

      

发现model文件又多了一个,并且其中的一个还有对勾图案。又对勾图案的表明,目前使用该model文件。选中查看另外一个model文件,发现它和目前使用的model文件(又对勾标识的)是一样的。其实,他就是一份拷贝。现在,需要做的是在这份拷贝model文件中做修改,把(Student)实体的age属性删除.而原先的model文件不去做修改。

现在,我希望程序使用我修改之后的model文件。那么,选中CoreDataUpdate.xcdatemodeld文件,选中file inspector, 找到Model Version,将当前的model文件替换为CoreDataUpdate2

那么,现在绿色对勾标示的就是CoreDataUpdate2.xcdatemodel文件了。

重新生成(Student)实体所对应的类,以适应新的需求。

如果现在运行程序,程序依然会crash掉。还需要做一步修改。在创建的NSpersistentStoreCoordinator的地方,加上如下代码:

 NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption : @YES,

                              NSInferMappingModelAutomaticallyOption :@YES};

   if (![_persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeURL options:options error:&error])

这里,在创建NSPersistentStoreCoordinator的时候,会添加一个options的字典。

一切都会好起来的的。现在就可以运行了。

 

 
 
 

CoreData数据库升级的更多相关文章

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

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

  2. coredata 数据库升级

    在真实开发中,因为需求是不断变化的,说不定什么时候就需要往模型里添加新的字段,添加新的模型,甚至是大规模的重构:所以数据的迁移就显得尤为重要了. CoreData 中,数据迁移本质就是把旧的 SQLi ...

  3. CoreData 数据库

    封装CoreManager类 @implementation CoreDataManager { //上下文 NSManagedObjectContext *_ctx; } //单例 +(instan ...

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

    版权声明:本文为博主原创文章,未经博主允许不得转载. 如果IOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表.字段等操作),那在覆盖安装程序时就要进行CoreData数据库 ...

  5. Oracle数据库升级(10.2.0.4->11.2.0.4)

    环境: RHEL5.4 + Oracle 10.2.0.4 目的: 在本机将数据库升级到11.2.0.4 之前总结的Oracle数据库异机升级:http://www.cnblogs.com/jyzha ...

  6. 生产环境中,数据库升级维护的最佳解决方案flyway

    官网:https://flywaydb.org/ 转载:http://casheen.iteye.com/blog/1749916 1.  引言 想到要管理数据库的版本,是在实际产品中遇到问题后想到的 ...

  7. iOS - CoreData 数据库存储

    1.CoreData 数据库 CoreData 是 iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据.使用 CoreData 框架,程序员可以很轻松有效地通过面向对象的接 ...

  8. CoreData数据库

        一  CoreData 了解 1 CoreData 数据持久化框架是 Cocoa API 的一部分,首先在iOSS5 版本的系统中出现:      它允许按照 实体-属性-值 模式组织数据: ...

  9. CoreData数据库迁移的操作

    CoreData数据库迁移操作步骤,操作是基于Xcode7. 1.添加新的数据库.选中当前数据库版本:Editor->Add Model Verson,创建一个新的数据库版本. 2.Comman ...

随机推荐

  1. Spring Boot中application.yml与bootstrap.yml的区别(转)

    说明:其实yml和properties文件是一样的原理,主要是说明application和bootstrap的加载顺序.且一个项目上要么yml或者properties,二选一的存在. Bootstra ...

  2. 3D有向包围盒与球体碰撞的算法

    之前发的小游戏滚蛋躲方块中,用它来判断球体与立方体是否发生了碰撞. http://www.cnblogs.com/WhyEngine/p/3350012.html 现在发布下该算法: 有向包围盒OBB ...

  3. Android中XML解析-PULL解析

    前面写了两篇XML解析的Dom和SAX方式,Dom比较符合思维方式,SAX事件驱动注重效率,除了这两种方式以外也可以使用Android内置的Pull解析器解析XML文件. Pull解析器的运行方式与 ...

  4. Gradle for Android 翻译 -1

    英文版电子书下载 参考:Gradle for Android  一.从 Gradle 和 AS 开始 [Getting Started with Gradle and Android Studio] ...

  5. Java主流Web Service框架介绍:CXF和Axis2

    CXF和Axis2是目前java平台上最主流的两个框架,虽然两个项目都隶属ASF,但却是基于不同思想和风格实现的,因此也各有所长.   CXF:http://cxf.apache.org/ 是由过去的 ...

  6. IOS实现多媒体音频之音乐播放器

    随着智能手机市场越来越活跃,相应的app也变得五彩缤纷,各式各样,让你的app更吸引人多媒体技术不可避免.通过对音频和视频等控制让你的app更加丰富多彩,今天和大家一起研究下基本的音频使用.本文只提供 ...

  7. hdu 4491 Windmill Animation

    A windmill animation works as follows: A two-dimensional set of points, no three of which lie on a l ...

  8. SQL-查询排名

    select row_number() over(order by amount) as rank,* from dbo.t_group

  9. CentOS 7上安装WordPress详细步骤

    一.搭建Wordpress服务器环境需求: php 5.2.4 或者更高版本.MySQL 5.0 或者更高版本. 二.搭建Wordpress平台:以下以Wordpress3.92版本为例进行说明,如果 ...

  10. Compiling LIBFFM On OSX 10.9

    原文:http://blog.josephmisiti.com/compiling-libffm-on-osx-10.9/ I recently tried to compile LIBFFM (Fi ...