使用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; }