j_butterfly 发表于 2013-1-14 21:27:33

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

使用IOS的CoreData进行存储很方便,CoreData已经帮我们做了很多基础的工作,一般情况下没必要自己操作数据库了。
在开发中修改了实体模型,可能会遇到schema incompatibility的错误,这是因为修改了数据结构,要进行数据迁移。
其实很多简单的情况,不用这么麻烦,Coredata提供了轻量级的自动数据迁移,比如以下三个情况会自动进行:
1.简单的增加一个字段
2.把一个必填字段改为可选字段
3.把可选字段改为必填字段(但一定要定义默认值)
 
怎样开启自动迁移的功能?分三步
1.在App delegate类里修改persistentStoreCoordinator方法
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {    if (__persistentStoreCoordinator != nil) {      return __persistentStoreCoordinator;    }      NSURL *storeURL = [ URLByAppendingPathComponent:@"WorkXP.sqlite"];      NSError *error = nil;    __persistentStoreCoordinator = [ initWithManagedObjectModel:];      // handle db upgrade    NSDictionary *options = , NSMigratePersistentStoresAutomaticallyOption,                           , NSInferMappingModelAutomaticallyOption, nil];      if (!) {       // 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 = [ URLForResource:@"WorkXP" withExtension:@"momd"];    __managedObjectModel = [ initWithContentsOfURL:modelURL];    return __managedObjectModel;}
页: [1]
查看完整版本: 使用CoreData的轻量级自动数据迁移