iOS CoreData (二) 版本升級和數(shù)據(jù)庫遷移

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

  • 數(shù)據(jù)遷移的方式有好幾種掀虎,這里就先介紹我用的輕量級的數(shù)據(jù)遷移方式:Core Data輕量級遷移是適用于添加新表,添加新的實體付枫,添加新的實體屬性烹玉,等簡單的,系統(tǒng)能自己推斷出來的遷移方式阐滩。
    接下來在我之前寫的 iOS CoreData (一) 增刪改查 示例基礎上進行演示:
1二打、新建一個版本的數(shù)據(jù)庫模型Model2:
  • 選中Model.xcdatamodeld文件,選擇菜單editor->Add Model Version 取名為:Model2.xcdatamodel掂榔,然后就可以發(fā)現(xiàn)Model.xcdatamodeld目錄下有兩個版本的數(shù)據(jù)庫模型


    add model version.gif
2继效、設置當前coreData的數(shù)據(jù)模型為Model2:
  • 選中Model.xcdatamodel或Model2.xcdatamodel,在左側(cè)的Model Version 中選擇Current模版為Model2


    設置當前數(shù)據(jù)庫版本.gif
3装获、修改新數(shù)據(jù)模型Model2瑞信,在Model2上添加字段及表:
  • 從第2步 演示圖中可以看到舊Model中的表和實體屬性都自動遷移到了Model2中,新的表和實體屬性我們可以直接在Model2上操作創(chuàng)建穴豫,但是別忘了刪除原來的類文件凡简,重新生成下新的實體類:


    修改新數(shù)據(jù)模型Model2.gif
4、設置數(shù)據(jù)庫參數(shù)options精肃,打開數(shù)據(jù)庫升級遷移的開關秤涩。
  • 把方法- (nullable __kindof NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(nullable NSString *)configuration URL:(nullable NSURL *)storeURL options:(nullable NSDictionary *)options error:(NSError **)error中的options參數(shù)置為如下的options字典
 //創(chuàng)建持久化存儲助理:數(shù)據(jù)庫
 NSPersistentStoreCoordinator * store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

//請求自動輕量級遷移
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
                             nil];
   NSError *error = nil;
    //設置數(shù)據(jù)庫相關信息 添加一個持久化存儲庫并設置存儲類型和路徑,NSSQLiteStoreType:SQLite作為存儲庫
    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:options error:&error];

這里說一下新增加的2個參數(shù)的意義:
NSMigratePersistentStoresAutomaticallyOption = YES司抱,那么Core Data會試著把之前低版本的出現(xiàn)不兼容的持久化存儲區(qū)遷移到新的模型中筐眷,這里的例子里,Core Data就能識別出是新表状植,就會新建出新表的存儲區(qū)來浊竟。
NSInferMappingModelAutomaticallyOption = YES,這個參數(shù)的意義是Core Data會根據(jù)自己認為最合理的方式去嘗試MappingModel,從源模型實體的某個屬性津畸,映射到目標模型實體的某個屬性振定。

5、編譯結(jié)束肉拓,CoreData調(diào)試:

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

CoreData調(diào)試.png

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

贊贊.gif
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卑惜,一起剝皮案震驚了整個濱河市膏执,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌露久,老刑警劉巖更米,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異毫痕,居然都是意外死亡征峦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門消请,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栏笆,“玉大人,你說我怎么就攤上這事臊泰◎燃樱” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵缸逃,是天一觀的道長针饥。 經(jīng)常有香客問我,道長察滑,這世上最難降的妖魔是什么打厘? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮贺辰,結(jié)果婚禮上户盯,老公的妹妹穿的比我還像新娘。我一直安慰自己饲化,他們只是感情好莽鸭,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吃靠,像睡著了一般硫眨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巢块,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天礁阁,我揣著相機與錄音,去河邊找鬼族奢。 笑死姥闭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的越走。 我是一名探鬼主播棚品,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼靠欢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铜跑?” 一聲冷哼從身側(cè)響起门怪,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锅纺,沒想到半個月后掷空,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡囤锉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年拣帽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚼锄。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔽豺,靈堂內(nèi)的尸體忽然破棺而出区丑,到底是詐尸還是另有隱情,我是刑警寧澤修陡,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布沧侥,位于F島的核電站,受9級特大地震影響魄鸦,放射性物質(zhì)發(fā)生泄漏宴杀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一拾因、第九天 我趴在偏房一處隱蔽的房頂上張望旺罢。 院中可真熱鬧,春花似錦绢记、人聲如沸扁达。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跪解。三九已至,卻和暖如春签孔,著一層夾襖步出監(jiān)牢的瞬間叉讥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工饥追, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留图仓,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓判耕,卻偏偏與公主長得像透绩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容