テックキャンプ157日目〜Realm マイグレーション

kobasaです(´ω`*)
今回はマイグレーションについて調べていました。
マイグレーションの記述はDBのカラム名などを変更するまでは必要でなく、
変更が発生してから記述すれば良いようです。

マイグレーションの記述はAppDelegateファイルの
didFinishLaunchingWithOptions内に記述します。(RealmSwiftimport必要)

let config = Realm.Configuration(
    schemaVersion: 1,
    migrationBlock: { migration, oldSchemaVersion in
        if (oldSchemaVersion < 1) {
            //変更内容を記述
        }
    })

Realm.Configuration.defaultConfiguration = config
let realm = try! Realm()

変更を加える度にschemaVersionの値を増やしていきます。
何も変更を加えていない状態なら0なので初めての変更なら1を記述。
変更するのは「schemaVersion: 1,」と「oldSchemaVersion < 1」の部分。

カラムを追加・削除しただけの場合は変更内容の記述は不要みたいです。
nameをfullNameに変更したり、firstNameとlastNameを統合した場合など
保存しているデータを削除せずに活かす場合は記述が必要になります。

// nameをfullNameに変更
migration.renameProperty(onType: Person.className(), from: "name", to: "fullName")

// firstNameとlastNameをfullNameに統合
migration.enumerateObjects(ofType: Person.className()) { oldObject, newObject in
    let firstName = oldObject!["firstName"] as! String
    let lastName = oldObject!["lastName"] as! String
    newObject!["fullName"] = "\(firstName) \(lastName)"
}

カラム名変更のようなシンプルな変更ならこれだけで良さそうです。
アソシエーションなどが絡んでくると他の記述が必要になってくるのかも。

コメント

タイトルとURLをコピーしました