CoreData的DataModel的版本控制和遷移(僅介紹輕量遷移),coredatadatamodel
使用了CoreData的APP每次發布一個新版的時候,都應該建立一個新版資料模型。否則老使用者升級後容易Crash。
在Xcode中單擊XXXXX.xcdatamodel,點擊Editor菜單,並選擇Add Model Version,接著會被要求輸入新版本的名稱。然後點擊Finish。
產生的XXXXX 2.xcdatamodel是老版本資料模型,打勾的XXXXX.xcdatamodel是新版將要發布的資料模型,所以版本號碼越高,代表檔案越老,下次再建立一個版本時,這箇舊版本將被命名為XXXXX 3.xcdatamodel,隨著版本的積累,這些數位意義逐漸顯現出來。
CoreData支援兩種不同類型的遷移。輕量遷移和標準遷移。
如果你添加或移除了實體中的屬性,或者在資料模型中新增或刪除實體,輕量遷移即可,但如果將一個實體切分成兩個不同的實體,或者將某個屬性從一個實體中移動到另一個實體,輕量遷移無效,需要用標準遷移。
大多數普通修改均可由輕量遷移來完成。
方法是將AppDelegate的persistentStoreCoordinator方法做部分修改
將
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
修改為
NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@YES,NSInferMappingModelAutomaticallyOption:@YES}; if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
即可。
標準遷移詳見:
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html
PS: 無論是標準遷移還是輕量遷移,在APP上線前都需要做大量的測試,來保證版本更新不會因為資料模型的升級原因導致Crash
轉載請註明原著:http://blog.csdn.net/marvindev