`
j_butterfly
  • 浏览: 113731 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用CoreData的轻量级自动数据迁移

阅读更多

使用IOS的CoreData进行存储很方便,CoreData已经帮我们做了很多基础的工作,一般情况下没必要自己操作数据库了。

在开发中修改了实体模型,可能会遇到schema incompatibility的错误,这是因为修改了数据结构,要进行数据迁移。

其实很多简单的情况,不用这么麻烦,Coredata提供了轻量级的自动数据迁移,比如以下三个情况会自动进行:

1.简单的增加一个字段

2.把一个必填字段改为可选字段

3.把可选字段改为必填字段(但一定要定义默认值)

 

怎样开启自动迁移的功能?分三步

1.在App delegate类里修改persistentStoreCoordinator方法

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (__persistentStoreCoordinator != nil) {
        return __persistentStoreCoordinator;
    }
    
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"WorkXP.sqlite"];
    
    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    
    // handle db upgrade
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
       // Handle error
    }    
    
    return __persistentStoreCoordinator;
}

 

2.增加一个新版本

选择上你的xcdatamodel文件 Design -> Data Model -> Add Model Version (expand your xcdatamodeld item) 选择 “2″ (或者最新的) 文件, Design -> Data Model -> Set Current Version (然后编辑这个版本的文件)

 

3.在App delegate中指定momd资源

- (NSManagedObjectModel *)managedObjectModel {
    if (__managedObjectModel != nil) {
        return __managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"WorkXP" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return __managedObjectModel;
}
 
0
0
分享到:
评论

相关推荐

    iOS CoreData 数据迁移操作底板

    轻量级迁移主要用于数据模型的小改动,系统会自动处理这些变化。只需要在配置NSPersistentStoreDescription时,设置`shouldInferMappingModelAutomatically`为`true`和`migratePersistentStoreOnDemand`为`true`即可...

    CoreData版本迁移

    轻量级迁移不需要额外的映射模型,但如果数据模型改动较大,可能会导致问题。 2. 自定义映射模型迁移:对于复杂的数据模型更改,如重命名实体或更改关系,你需要创建一个映射模型(Mapping Model)来定义旧模型到新...

    CoreData增删改查

    CoreData支持轻量级迁移和定制迁移。轻量级迁移用于简单的模型更改,如添加属性;定制迁移则允许更复杂的结构变化,需要编写映射模型来描述旧模型到新模型的转换。 7. **性能优化**: 为了提高性能,可以使用...

    CoreData数据库操作和版本管理

    - **迁移(Migration)**:将旧数据自动或手动迁移到新模型,包括轻量级迁移和自定义映射迁移。 - **轻量级迁移(Lightweight Migration)**:适用于结构不发生重大变化的情况,如添加属性或关系。 - **自定义...

    CoreData 封装

    迁移策略包括轻量级迁移和自定义映射模型迁移,根据具体情况选择合适的方法。 以上就是CoreData封装的一些关键点。理解并熟练运用这些知识点,可以使你在开发中更高效地管理数据,提供稳定且高性能的应用体验。通过...

    CoreData的使用(默认值,属性验证,升级)

    苹果提供了轻量级迁移(Lightweight Migration),适用于大多数简单模型变更。在Info.plist中开启轻量级迁移,并确保版本号正确。如果模型变更复杂,可能需要自定义映射模型。 六、ZCoreData示例 "ZCoreData"可能是...

    CoreDataUpdateDemo

    2. **自定义迁移(Custom Migration)**:如果数据模型发生了“不兼容”变化,如删除实体或修改实体的主键,轻量级迁移就无法处理了。这时,开发者需要编写自定义的映射模型和迁移代码,以确保数据的正确迁移。 3. ...

    CoreData的使用

    12. ** Migration(迁移)**:当数据模型发生变化时,CoreData提供了轻量级和重载的迁移策略来平滑过渡旧数据到新模型。 13. ** 错误处理**:CoreData提供了丰富的错误处理机制,帮助开发者识别和解决在数据操作...

    CDWrangler:CDWrangler 是一个 CoreData 管理器,它将执行模型的轻量级和手动迁移

    牧马人CDWrangler 是一个 CoreData 管理器,它将执行模型的轻量级和手动迁移。 CDWrangler 需要 ARC。 在 iOS 8.1 上测试。用法 // Migrationif ([[CDWrangler sharedWrangler ] isMigrationNeeded ]) { // The key ...

    ios-coredata的应用

    - 轻量级迁移适用于简单模型改动,如添加属性,系统会自动尝试匹配旧模型和新模型之间的关系。 - 自定义映射模型适用于复杂改动,如实体重命名或关系结构变化,需要手动创建映射模型来指导迁移过程。 在...

    coredata使用

    当数据模型发生改变时,Core Data提供了轻量级迁移和手动迁移策略,帮助你在不影响用户数据的情况下更新应用。 11. **错误处理**: 在使用Core Data时,必须正确处理可能出现的错误,例如数据验证失败、存储问题...

    ios coredata demo

    当数据模型发生变化时,Core Data提供了多种策略进行数据迁移,如轻量级迁移和映射模型迁移。这些在项目的不同版本迭代中可能会用到。 9. **CDataTest** `CDataTest`可能是该项目中的一个测试模块,用于验证Core ...

    CoreDataDemo:CoreData一些demo,包括后台操纵,多线程导入大数据等

    CoreData提供了不同的迁移策略,如轻量级迁移和自动映射迁移,项目可能会展示如何在代码中实现这些策略。 通过研究和学习CoreDataDemo中的代码,开发者可以深入了解CoreData的工作原理,掌握在实际项目中如何有效地...

    Pro Core Data for iOS.pdf

    **数据版本管理**:介绍如何进行数据版本控制,包括轻量级迁移、创建映射模型以及迁移数据。 ### Chapter 9: Using Core Data in Advanced Applications **高级应用实践**:创建一个用于笔记和密码存储的加密应用...

    CoreDataDemo

    SQLite是一种轻量级的关系型数据库,适合在iOS设备上本地存储数据。选择这个存储类型意味着我们的数据将以结构化的SQL形式存储,易于查询和检索。 在设置CoreData栈时,我们需要配置NSPersistentContainer。这个...

    coreDataDemo

    如果数据模型发生变化,Core Data提供了轻量级迁移和手动迁移策略来处理数据模型的升级。 9. **性能优化**: 为了提高性能,可以使用预加载(faulting)和缓存策略,避免不必要的磁盘I/O。同时,合理的使用...

    iOS常用开源库列表

    - **简介**:JSONKit 是一个轻量级的 JSON 解析库,专为 iOS 和 macOS 设计。 - **特点**: - 支持将 JSON 字符串转换成 NSDictionary 或 NSArray。 - 支持将 NSDictionary 或 NSArray 转换成 JSON 字符串。 - ...

    Core Data by Tutorials iOS 12 and Swift 4.2, 5th Edition 完整源代码,每个项目包括初始版本和最终版本

    这部分会介绍轻量级迁移和自定义迁移的区别和用法。 07-Unit-Testing章节探讨了如何为Core Data应用程序编写单元测试,确保代码的健壮性。你将了解如何创建测试目标,编写针对数据模型、存取对象和上下文的测试用例...

    iPhoneOSTechOverview

    - **块对象**:用于封装代码段的轻量级数据结构。 - **Grand Central Dispatch(GCD)**:并行编程框架。 - **SQLite**:嵌入式数据库引擎。 - **XML支持**:解析和生成XML文档。 此外,该层还包含了多个框架,如: ...

    iOS高级专题

    SQLite是一种轻量级的关系型数据库,适用于存储结构化数据。开发者需要学习SQL语言来操作数据,理解事务处理和优化查询性能。CoreData是Apple提供的对象图管理器,它提供了数据模型、持久化和关系的抽象,简化了数据...

Global site tag (gtag.js) - Google Analytics