iOSCoreData(二)版本升級和數據庫遷移

NO IMAGE

前言:最近ChinaDaily項目需要迭代一個新版本,在這個版本中CoreData數據庫模型上有新增表、實體字段的增加,那麼在用戶覆蓋安裝程序時就必須要進行CoreData數據庫的版本升級和舊數據遷移,如果僅僅是在舊版本的數據模型上進行上述操作,就會造成所有舊用戶更新完成後的第一次啟動崩潰。
示例Demo:CoreDataLearn

  • 數據遷移的方式有好幾種,這裡就先介紹我用的輕量級的數據遷移方式:Core Data輕量級遷移是適用於添加新表,添加新的實體,添加新的實體屬性,等簡單的,系統能自己推斷出來的遷移方式。
    接下來在我之前寫的 iOS CoreData (一) 增刪改查 示例基礎上進行演示:
1、新建一個版本的數據庫模型Model2:
  • 選中Model.xcdatamodeld文件,選擇菜單editor->Add Model Version 取名為:Model2.xcdatamodel,然後就可以發現Model.xcdatamodeld目錄下有兩個版本的數據庫模型
    iOSCoreData(二)版本升級和數據庫遷移
2、設置當前coreData的數據模型為Model2:
  • 選中Model.xcdatamodel或Model2.xcdatamodel,在左側的Model Version 中選擇Current模版為Model2
    iOSCoreData(二)版本升級和數據庫遷移
3、修改新數據模型Model2,在Model2上添加字段及表:
  • 從第2步 演示圖中可以看到舊Model中的表和實體屬性都自動遷移到了Model2中,新的表和實體屬性我們可以直接在Model2上操作創建,但是別忘了刪除原來的類文件,重新生成下新的實體類:
    iOSCoreData(二)版本升級和數據庫遷移
4、設置數據庫參數options,打開數據庫升級遷移的開關。
  • 把方法- (nullable __kindof NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(nullable NSString *)configuration URL:(nullable NSURL *)storeURL options:(nullable NSDictionary *)options error:(NSError **)error中的options參數置為如下的options字典
 //創建持久化存儲助理:數據庫
NSPersistentStoreCoordinator * store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
//請求自動輕量級遷移
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
NSError *error = nil;
//設置數據庫相關信息 添加一個持久化存儲庫並設置存儲類型和路徑,NSSQLiteStoreType:SQLite作為存儲庫
[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:options error:&error];

這裡說一下新增加的2個參數的意義:
NSMigratePersistentStoresAutomaticallyOption = YES,那麼Core Data會試著把之前低版本的出現不兼容的持久化存儲區遷移到新的模型中,這裡的例子裡,Core Data就能識別出是新表,就會新建出新表的存儲區來。
NSInferMappingModelAutomaticallyOption = YES,這個參數的意義是Core Data會根據自己認為最合理的方式去嘗試MappingModel,從源模型實體的某個屬性,映射到目標模型實體的某個屬性。

5、編譯結束,CoreData調試:

打開Product,選擇Edit Scheme.
選擇Arguments,在下面的ArgumentsPassed On Launch中添加下面兩個選項,如圖:
(1)-com.apple.CoreData.SQLDebug
(2)1

iOSCoreData(二)版本升級和數據庫遷移

之前相關文章:iOS CoreData (一) 增刪改查

iOSCoreData(二)版本升級和數據庫遷移

相關文章

iOS自定義轉場動畫

UIScrollView視覺差動畫

iOS封裝原生二維碼掃描和生成

iOS傳感器集錦