Realm數(shù)據(jù)庫遷移

項目中用到了Realm做數(shù)據(jù)存儲,在版本迭代時對存儲的用戶信息新增了一個屬性,結(jié)果導(dǎo)致項目崩潰。經(jīng)查閱發(fā)現(xiàn)本有做數(shù)據(jù)庫遷移操作,現(xiàn)將Realm數(shù)據(jù)庫遷移的方法貼出來,希望有用的同學(xué)可以拿走。

當(dāng)RLMObject屬性增加、刪除、更改時,原數(shù)據(jù)庫需要進行遷移處理,在
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;方法里寫入如下對應(yīng)操作的代碼

RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.schemaVersion =2;
config.migrationBlock = ^(RLMMigration *migration, uint64_t   oldSchemaVersion){

// enumerateObjects:block: 遍歷了存儲在 Realm 文件中的每一個“Person”對象
[migration enumerateObjects:Person.className block:^(RLMObject *oldObject, RLMObject *newObject) {
    if(oldSchemaVersion <1) {// 只有當(dāng) Realm 數(shù)據(jù)庫的架構(gòu)版本為 0 的時候,才添加 “fullName” 屬性
        newObject[@"fullName"] = [NSString stringWithFormat:@"%@ %@", oldObject[@"firstName"], oldObject[@"lastName"]]; 
    }
    if(oldSchemaVersion <2) {// 只有當(dāng) Realm 數(shù)據(jù)庫的架構(gòu)版本為 0 或者 1 的時候,才添加“email”屬性
        newObject[@"email"] = @"";       
    }
    if(oldSchemaVersion <3) {// 替換屬性名
        // 重命名操作應(yīng)該在調(diào)用 `enumerateObjects:` 之外完成
       [migration renamePropertyForClass:Person.className oldName:@"yearsSinceBirth"newName:@"age"];   
    }
 }];

 [RLMRealmConfiguration setDefaultConfiguration:config];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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