CoreData轻量级版本迁移
来源:互联网 发布:微商有在淘宝进货的吗 编辑:程序博客网 时间:2024/06/11 17:54
CoreData 版本迁移
轻量级迁移
如果你仅仅对你的模型做简单的改变(例如向一个实体里增加一个新的属性),CoreData可以执行自动的数据迁移,即所谓的轻量级迁移。轻量级的迁移功能上和普通的迁移相同,除了你不用提供一个映射模型,CoreData可以根据原管理对象模型和目的管理对象模型的不同推断出一个映射模型。
轻量级迁移在早期的开发过程中,比如当你可能会频繁改变你的管理对象模型,但是你又不想必须去保存再生的测试数据的时候是相当方便的。你可以迁移已存在的数据而不需要必须为每一个模型版本创建一个自定义的映射模型。
一个比你不用自己创建映射模型更大的好处来使用轻量级迁移就是:如果i使用一个推断的模型,而且你使用SQLite存储,那么CoreData可以用SQL语句进行迁移。这是一个很大的性能优化,因为CoreData不用加载你的数据。
CoreData 必须能够推断映射模型
为了执行自动的轻量级迁移,CoreData需要在运行期自己找到源和目地管理对象模型。CoreData会在bundle中寻找模型。coredata必须能够分析出持久化实体和属性的语法改变并且产生一个推断的映射模型。
在以下情况下,coredata可以产生一个推断的映射模型:
1.简单的增加一个新属性
2.移除一个属性
3.一个非可选的属性变成可选的。
4.一个可选属性变成不可选的,并且定义一个默认值。
5.重命名一个实体或者属性。
如果你重命名一个实体或者属性,你可以设置目地模型中的重命名标识符到源模型相应实体或者属性的名字。你可以在xcode中的数据模型工具的属性检查器中设置。
重命名标识符创建一个规范的名字,所以你应该设置重命名标识符到源模型的属性名上。这意味着你可以在一个模型的版本2中重命名属性,然后在版本3中又可以重命名。这个重命名将会在版本2到3或者版本1到3中正常工作。
另外轻量级迁移同样支持以下情况:
1.添加关系和改变关系类型
(1)你可以增加一个新的关系或者可以删除一个已存在的关系。
(2)重命名一个关系。(使用重命名标识符)
(3)改变一个关系,从一对一到一对多。或者一个无序的一对多到一个有序的。
2.改变实体层级
(1)你可以增加,移除,重命名实体。
(2)你可以创建一个新的父实体或者子实体并且在实体层级上下移动属性。
(3)你可以从一个层级中移除实体。(但是你不能合并实体层级,如果已经存在的实体在源模型中不能分享一个父实体,那么在目地模型中也不可以)。
迁移步骤:
1.选中工程中的xcdaramodeld文件,在工具栏的Editor选择Add Model Version。(这一步完成之后会出现新增加的model文件)
2.在xcode右侧的辅助工具栏中找到Model Version,选择新添加的Model文件,此时Model文件上的绿色的勾选中了当前选择的Model文件。
3.在新的Model文件中修改最新的Entity信息,同时修改NSManagedObject子类对应的实现。
4.修改NSPersistentStoreCoordinator部分实现。通过设置options字典里NSMigratePersistentStoreAutomaticallyOption和NSInferMappingModelAutomaticallyOption对应的键值为YES,并且将这个options字典传递给addPersistentStoreWithType:configuration:URL:options:error:方法,就可以请求自动轻量级迁移。
NSError *error = nil;NSURL *storeURL = <#The URL of a persistent store#>;NSPersistentStoreCoordinator *psc = <#The coordinator#>;NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; BOOL success = [psc addPersistentStoreWithType:<#Store type#> configuration:<#Configuration or nil#> URL:storeURL options:options error:&error];if (!success) { // Handle the error.}
- CoreData轻量级版本迁移
- iOS CoreData数据迁移-轻量级迁移
- CoreData版本迁移
- CoreData的版本迁移
- coredata lightweight migration 轻量级自动迁移
- 使用CoreData的轻量级自动数据迁移
- 使用CoreData的轻量级自动数据迁移
- coredata lightweight migration 轻量级自动迁移
- 使用CoreData 和版本迁移
- CoreData版本迁移(一)
- CoreData版本迁移(二)
- iOS 10 coreData 版本迁移
- CoreData版本升级和数据迁移
- 关于CoreData版本迁移的问题
- CoreData(数据库升级 )版本迁移-iOS App升级安装
- iOS 数据持久化 CoreData的版本迁移
- CoreData(数据库升级 )版本迁移-iOS App升级安装
- CoreData的使用/以及coreData中的多线程问题/版本迁移(二)
- ViewPage判断左右滑动
- 收集数据的再次尝试
- C#学习笔记之操作配置文件
- iOS开发-关闭/收起键盘方法总结
- linux 配置tomcat https访问
- CoreData轻量级版本迁移
- TortoiseGit连接github不用每次输入用户名和密码的方法
- lucas定理学习小记
- 调整Oracle应用系统性能的原则和方法(1)
- .sh文件无法执行
- RecyclerView和CardView的使用
- JVM内存的各区域
- 解决929刷机后铃声只能选静音的方法(刷机后没有铃声)
- 14.10.2 File Space Management 文件空间管理: