zoukankan      html  css  js  c++  java
  • CoreData版本升级数据迁移

    CoreData数据库结构升级和数据迁移

    app中使用了CoreData,并且在下一个版本中有实体变动,比如实体新增字段、修改字段等改动,那么app在覆盖安装时就要进行数据库迁移,否则app就会crash

    数据库迁移步骤

    1.选中.xcdatamodeld文件,然后点击Xcode菜单editor->Add Model Version  比如取名:Model.xcdatamodel

    2.取一个Version名字,Based on model是基于现有Model文件,一般是基于上一个版本Model,如果基于早与2个版本数据可能会丢失.

    3.这时Model会多出一个版本xcdatamodel

    4.设置当前数据库版本,选择刚才创建的版本,在inspector中的Versioned Core Data Model选择Current模版为Model3,基于当前最新版本xcdatamodel.

    5.在最新最新Model3.xcdatamodel上新增修改表表/字段/关系等,当前最新版本为Model3

    6.重新生成实体类,选中Model3.xcdatamodel

    然后下一步,选中需要重新生成的实体model.重新生成就OK,无需先把现有实体类删除再生成.

    7.修改持久调度器中设置选项

    //1、创建模型对象
        //获取模型路径
        NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
        //根据模型文件创建模型对象
        NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
        
        
        //2、创建持久化助理
        //利用模型对象创建助理对象
        NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
        
        //数据库的名称和路径
        NSString *docStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        NSString *sqlPath = [docStr stringByAppendingPathComponent:@"mySqlite.sqlite"];
        NSLog(@"path = %@", sqlPath);
        NSURL *sqlUrl = [NSURL fileURLWithPath:sqlPath];
        
        NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@(YES),NSInferMappingModelAutomaticallyOption:@(YES)};
        //设置数据库相关信息
        [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:options error:nil];
        
        //3、创建上下文
        NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
        
        //关联持久化助理
        [context setPersistentStoreCoordinator:store];
        
        _context = context;

    关键代码为:

    NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@(YES),NSInferMappingModelAutomaticallyOption:@(YES)};
        //设置数据库相关信息
    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:options error:nil];

    重新运行编译运行项目就正常可以运行.通过查看数据库文件表和字段已经加上,员工表已经机上rDate字段.

    以上就iOS app CoreData数据库升级数据迁移步骤. App升级覆盖安装数据就迁移了,也不会出现因修改了表而导致app Crash. App卸载安装数据库使用设置的当前最新版本xcdatamodel数据结构.

  • 相关阅读:
    九九乘法表
    杨辉三角
    显示计算机界面
    完善3.2
    杨辉三角形
    100以内的素数
    九九乘法表
    杨辉三角
    九九乘法表
    杨辉三角形
  • 原文地址:https://www.cnblogs.com/HJiang/p/7819124.html
Copyright © 2011-2022 走看看