coredata lightweight migration 轻量级自动迁移

coredata与tableview配合十分默契,而开发初期经常需要变动coredata的数据模型结构,不同的模型必须要进行迁移,否则App就crash了。

迁移就是要在老版本和新版本的数据库模型之间建立映射(mapping),这是当数据库模型变动较“大”时必须使用的方法,而当变动较小时,Coredata能够自动推导模型变化而进行迁移,这是所谓轻量级迁移lightweight migration。

何谓变化“小”

1.增加属性

2.删除属性

3.非可选属性变成可选属性

4.可选属性变成非可选属性,且指定一个默认值

5.重命名实体或属性

6.增加关系及改变关系的类型

增加或删除关系,重命名关系,改变关系类型(一对一,一对多,。。。)

7. 改变实体层级(hierarchy)

      增加、删除和重命名实体,创建实体的父、子实体或在实体继承结构中上下移动,将实体移出继承结构

其实可以允许的变化一点也不小吧,:)


好了,看下轻量级迁移的步骤:

1. 在得到persistentstore时,一般是在appdeleate的persistentStoreCoordinator方法中,为addPersistentStoreWithType:configuration:URL:options:error:方法的options传递参数,模板产生的方法该参数是nil。

为支持自动迁移,传递一个包含2个key的字典作为参数,NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption,赋值YES。

其实用模板生成的启动Coredata工程仔细看的话该函数下面有段注释

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"xxx.sqlite"];
    
    NSError *error = nil;
    NSDictionary * opt = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:opt error:&error])

2. 创建新版本并选择当前active模型版本,

xcode 4里,创建新模型是在Editor里的Add Model Verison,

要选择当前使用的数据模型版本,在文件导航中,先选中appname.xcdatamodeld这个,然后在右侧属性栏中Versiond Core Data Model中选择Current的模型版本。




3.OK了,再次运行,App可以访问新版本的coredata数据库模型了。


如果遇到错误,可以是无法轻量级迁移,也可能是模型文件找不到,请参考文档去找答案吧


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值