iOS持久化Core Data之二 托管对象模型的迁移
来源:互联网 发布:淘宝上正品金丝楠木店 编辑:程序博客网 时间:2024/05/18 03:14
说明:按照《Core Data 应用开发》的思路整理记录
如果对模型进行了结构化的更改,则需要把旧模型上数据迁移到新的模型上,否则映射错误,程序会崩溃。
(一) 创建新的模型版本
(二) 轻量级的迁移方式
将新模型设为当前版本后,协调器会尝试用新的模型打开原有的存储区,在向协调器添加存储区的时候,我们需要传递 option 来指导协调器。
在 CoreDataHelper 类中,loadStore 方法 中添加代码:
NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@"YES" ,NSInferMappingModelAutomaticallyOption:@"YES" };添加后 loadStore 方法如下:
//加载sqlite持久化文件- (void)loadStore{ if(debug == 1){ NSLog(@"Running %@ '%@'", self.class,NSStringFromSelector(_cmd)); } if(_store){return;} NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@"YES" ,NSInferMappingModelAutomaticallyOption:@"YES" }; NSError *error = nil; _store = [_coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self storeURL] options:options error:&error]; if(!_store){ NSLog(@"Failed to add store. Error: %@", error); }else{ if(debug == 1){ NSLog(@"Successfully added store: %@", _store); } }}其中 NSMigratePersistentStoresAutomaticallyOption 为 YES 的话,Core Data 会试着把低版本的持久化存储区迁移至新版本;
NSInferMappingModelAutomaticallyOption 为 YES 的话,Core Data 会以最合理的方式,把旧模型的实体属性对应到新模型的实体属性上。
(三) 默认的迁移方式
有时我们会需要精确的控制,比如实体名和属性名发生变化,需要手工创建模型映射。假设原实体为 Measurement 属性为 abc,现实体为 Amount 属性为 xyz,我们的工作是在新旧模型上,建立两者的映射。
创建 Mode2toModel3
旧:Source
新:Target
还要将 NSInferMappingModelAutomaticallyOption 设置为 NO
阅读全文
1 0
- iOS持久化Core Data之二 托管对象模型的迁移
- iOS持久化Core Data之三 托管对象模型的扩展
- iOS 之Core Data持久化存储
- IOS数据持久化之Core Data
- IOS数据持久化之Core Data(二) - 单表操作
- IOS数据持久化之Core Data(一) - 框架说明
- IOS数据持久化之Core Data(三) - 验证输入
- ios开发学习笔记--数据持久化之Core Data
- iOS 数据持久化 -- Core Data
- iOS 数据持久化 -- Core Data
- iOS 数据持久化 -- Core Data (2)
- iOS持久化Core Data之一 CoreDataHelper
- Core Data数据持久化的使用
- iOS 之core Data操作(二)
- Core Data 模型版本升级和数据迁移(二)轻量级数据迁移
- IOS数据持久化之Core Data(四) - 多表查询
- iOS应用开发之Core Data数据持久化存储笔记
- Core Data 教程:多托管对象上下文
- 基于React.js + ANT DESIGN 中使用异步请求之----fetch封装
- Attribute 和 Parameter 的区别
- Jenkins之源码管理
- JDBC练习 模拟转账事件
- swapin的现象
- iOS持久化Core Data之二 托管对象模型的迁移
- Leetcode Best Time to Buy and Sell Stock II
- #、##和__VA_ARGS__
- 如何给recyclerView瀑布流设置均等间距
- asp.net项目中通过Web.config配置文件及文件夹的访问权限!
- 基于容器服务的持续集成与云端交付(一)- 交付之禅
- maven打包的时候不打包test里的内容
- WindowManager$BadTokenException: Unable to add window — token android.os.BinderProxy@465 is not vali
- Insall Maven in Eclipse