使用IOS的CoreData进行存储很方便,CoreData已经帮咱们作了不少基础的工做,通常状况下不必本身操做数据库了。 sql
在开发中修改了实体模型,可能会遇到schema incompatibility的错误,这是由于修改了数据结构,要进行数据迁移。 数据库
其实不少简单的状况,不用这么麻烦,Coredata提供了轻量级的自动数据迁移,好比如下三个状况会自动进行: 数据结构
1.简单的增长一个字段 app
2.把一个必填字段改成可选字段 spa
3.把可选字段改成必填字段(但必定要定义默认值) code
怎样开启自动迁移的功能?分三步 sqlite
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 (而后编辑这个版本的文件) it
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; }