coredata lightweight migration 轻量级自动迁移
2014-04-29 20:56
344 查看
转自:http://blog.csdn.net/sirchenhua/article/details/7302729
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的字典作为参数,NSMigratePersistentStoresAutomaticallyOption和NSInferMappingModelAutomaticallyOption,赋值YES。
其实用模板生成的启动Coredata工程仔细看的话该函数下面有段注释
[java] view
plaincopyprint?
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数据库模型了。
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的字典作为参数,NSMigratePersistentStoresAutomaticallyOption和NSInferMappingModelAutomaticallyOption,赋值YES。
其实用模板生成的启动Coredata工程仔细看的话该函数下面有段注释
[java] view
plaincopyprint?
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数据库模型了。
相关文章推荐
- coredata lightweight migration 轻量级自动迁移
- CoreData 的自动平滑升级(Automatic Lightweight Migration)
- coredata Lightweight Migration 心得
- Core Data 学习:轻量级版本迁移(Lightweight Migration)
- CoreData轻量级版本迁移
- CoreData版本迁移
- ios Coredata 关联 UITableView 数据自动更新
- iOS CoreData数据迁移-默认迁移方式
- ios Coredata 关联 UITableView 数据自动更新
- Entity Framework Core 2.0 使用代码进行自动迁移
- Core Data Migration 之拆分Entity
- 手把手教你从Core Data迁移到Realm
- iOS Core Data 数据迁移 指南
- Core Data 版本迁移经验总结
- [iOS Diary]NSInvalidArgumentException with NSOrderedSet using CoreData 可能是CoreData自动生成代码的一个Bug
- Core Data Migration 之拆分Entity
- UITableView,UICollectionView和CoreData完美结合进行增删改操作,如何导入大量数据,如何利用NSEntityMigrationPol
- Core Data 迁移与版本管理
- 【iOS】CoreData对象关联时,自动生成的关联属性类型不对
- Core Data Migration 之拆分Entity