Coredata的版本升级

article/2025/8/19 20:23:16

在开发的后期,可能因为完善和修复功能,需要对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], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption , nil];//添加的字典//加入到存储器中
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil    URL:storeUrl   options:optionsDictionary  error:&error]) {  
} //添加 *optionsDictionary,原来options:nil  改成options:optionsDictionary 

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


http://chatgpt.dhexx.cn/article/V5Yih8mP.shtml

相关文章

在建好的项目中加入CoreData

这几天在做一个ios的小项目,项目中需要对数据进行基本的增删改查操作。于是就想用一把CoreData。但在创建项目初期,没有包含进CoreData。于是就在已建好的项目中加入CoreData。由于第一次用CoreData,各方面还不是很熟悉,在网上爬文…

CoreData的简单使用

简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何…

数据持久化(五)之CoreData

简单的说,Core Data就是可以存储到磁盘的对象图,[...]Core Data可以帮我们做很多任务作.它可以作为软件的整个模型层。它不仅仅在磁盘上存储数据,也把我们需要的数据对象读取到内存中。 ——Marcus Zarra, Core Data Core Data是Mac OS X中Cocoa API的一部分&#…

coredata 详解

原文:Core Data Overview,感谢CocoaChina翻译组帮忙校对。 Core Data可能是OS X和iOS里面最容易被误解的框架之一了,为了帮助大家理解,我们将快速的研究Core Data,让大家对它有一个初步的了解,对于想要正确…

Core Data 详解

Core Data是一个Cocoa框架,用于为管理对象图提供基础实现,以及为多种文件格式的持久化提供支持。管理对象图包含的工作如撤销(undo)和重做(redo)、有效性检查、以及保证对象关系的完整性等。对象的持久化意…

Core Data概述

昨晚熬夜看发布会(本以为屌丝终于能买得起苹果了,谁知道。。。),因为看不了视频直播,所以就正好有空就把www.objc.io最新的一篇文章翻译了一下,同时感谢CocoaChina翻译组提供校对,以下为正文: Core Data可能…

CoreData 的使用

CoreData其实就是Apple为开发者提供的便捷数据存储方式,本质是对sqlite数据库的操作,操作的数据量为中到大量。 操作数据库,还有FMDB第三方库,相比于FMDB,CoreData要更简单,更方便。 集成CoreData: 1,创…

Core Data的使用

初步看了一下Core Data这个东西,本想早一点写这篇东西的,不过各种俗事缠身,又觉得自己对于Core Data机制了解的还不够深,动笔就慢了几天。不过今天盘点一下,觉得可以说一点东西出来就先说一点吧。 Core Data到底是个什…

CoreData简单使用

苹果的CoreData框架(不限于)提供了一种数据持久化解决方案,它基于如下结构(图片来源苹果官网): 其中涉及了几个概念: NSManagedObject: 数据库中一条记录在内存的实例。 NSManagedObjectConte…

ios中的coredata的使用

Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类。 (1)NSManagedObjectModel(被管理的对象模型) 相当于实体,不过它包含 了实体间的关系 (2…

CoreData使用

一、CoreData的简单使用 1.什么是CoreData 先认识一下这几个类 (1)NSManagedObjectContext(被管理的数据上下文) 作用:用来管理所有表的操作,对表的实体对应的数据库中的表的操作(插入,查询,修改…

iOS CoreData的使用

CoreData是一个专门管理数据服务的框架,把OC对象和存储在SQLite文件中的数据进行互相转换,极大地方便了开发者在数据服务方面的开发。 1. 创建CoreData 在文件创建区下,选择【Core Data】下的【Data Model】 输入CoreData的文件名Model.x…

Core Data 概述

Core Data 概述 转载自: http://www.cocoachina.com/newbie/basic/2013/0911/6981.html Core Data可能是OS X和iOS里面最容易被误解的框架之一了,为了帮助大家理解,我们将快速的研究Core Data,让大家对它有一个初步的了解&#x…

CoreData相关01 基础及运用:添加、查询、过滤、排序、分页

CoreData CoreData中几乎不用写数据库操作语句就能完成数据的本地化存储。 CoreData和iOS中的模型对象相联系在一起,只需要操作模型对象的增删改查就可以完成数据的增删改查,不用写SQL语句。 CoreData的存储方式 SQLite NSSQLiteStoreType XML NSXML…

JVM原理分析

JVM原理分析 为什么Java是一种跨平台语言 1、不同系统的JDK下载 JDK里面有:Jre和Jvm,其中就有JVM指令集的不同 JVM主要结构: 栈、堆、方法区、程序计数器、本地方法栈 mian方法的执行 通过类装载子系统进入JVM 其中栈中存放线程 来一个…

JVM实现原理

JVM原理 1、概念简介2、为什么要学习JVM虚拟机?3、JVM怎么学?3.1 内存管理1、jvm运行时数据区 1、概念简介 JVM:JAVA虚拟机JRE:Java运行环境 JREJVM虚拟机Java核心类库支持文件JDK:Java开发工具包 JDKJREJava工具Java…

【JVM调优】JVM原理与性能调优

一、参考资料 今日头条https://www.toutiao.com/i7007696978586976805

JVM原理和调优的理解和学习

JVM原理和调优的理解和学习 一、详解JVM内存模型二、JVM中一次完整的GC流程是怎样的三、GC垃圾回收的算法有哪些四、简单说说你了解的类加载器五、双亲委派机制是什么,有什么好处,怎么打破六、说说你JVM调优的几种主要的JVM参数七、JVM调优八、类加载的机…

JVM原理-jvm内存模型

一、jvm内存模型 结构图 JVM包含两个子系统和两个组件 Class loader(类装载子系统) 根据给定的全限定名类名(如:java.lang.Object)来装载class文件到 Runtime data area运行时数据区中的method area方法区中Execution engine(执行引擎) 执行classes中的指令Runt…