CoreData數據庫結構升級和數據遷移
app中使用了CoreData,并且在下一個版本中有實體變動,比如實體新增字段、修改字段等改動,那么app在覆蓋安裝時就要進行數據庫遷移,否則app就會crash
數據庫遷移步驟
1.選中.xcdatamodeld文件,然后點擊Xcode菜單editor->Add Model Version 比如取名:Model.xcdatamodel

2.取一個Version名字,Based on model是基于現有Model文件,一般是基于上一個版本Model,如果基于早與2個版本數據可能會丟失.

3.這時Model會多出一個版本xcdatamodel

4.設置當前數據庫版本,選擇剛才創建的版本,在inspector中的Versioned Core Data Model選擇Current模版為Model3,基于當前最新版本xcdatamodel.

5.在最新最新Model3.xcdatamodel上新增修改表表/字段/關系等,當前最新版本為Model3
6.重新生成實體類,選中Model3.xcdatamodel

然后下一步,選中需要重新生成的實體model.重新生成就OK,無需先把現有實體類刪除再生成.
7.修改持久調度器中設置選項
//1、創建模型對象 //獲取模型路徑 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"]; //根據模型文件創建模型對象 NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; //2、創建持久化助理 //利用模型對象創建助理對象 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; //數據庫的名稱和路徑 NSString *docStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *sqlPath = [docStr stringByAppendingPathComponent:@"mySqlite.sqlite"]; NSLog(@"path = %@", sqlPath); NSURL *sqlUrl = [NSURL fileURLWithPath:sqlPath]; NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@(YES),NSInferMappingModelAutomaticallyOption:@(YES)}; //設置數據庫相關信息 [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:options error:nil]; //3、創建上下文 NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; //關聯持久化助理 [context setPersistentStoreCoordinator:store]; _context = context;
關鍵代碼為:
NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@(YES),NSInferMappingModelAutomaticallyOption:@(YES)}; //設置數據庫相關信息 [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:options error:nil];
重新運行編譯運行項目就正常可以運行.通過查看數據庫文件表和字段已經加上,員工表已經機上rDate字段.

以上就iOS app CoreData數據庫升級數據遷移步驟. App升級覆蓋安裝數據就遷移了,也不會出現因修改了表而導致app Crash. App卸載安裝數據庫使用設置的當前最新版本xcdatamodel數據結構.
浙公網安備 33010602011771號