领域迁移:更新多个对象和回退策略?

Realm Migration: Update multiple objects and fallback strategy?

我不明白如何迁移多个对象。例如,如何在对象设置和人员上引入字符串 "identifier"?

func configureRealm(){

        Realm.Configuration.defaultConfiguration = Realm.Configuration(
            schemaVersion: 1,
            migrationBlock: { migration, oldSchemaVersion in

                migration.enumerate(Settings.className()) { oldObject, newObject in

                    if oldSchemaVersion < 1 {
                        newObject!["identifier"] = NSUUID().UUIDString
                    }
                }
        })
    }

是否可以引入通用的回退策略:当迁移失败时模型应该重置?

在迁移块中,您只需为 Person 对象添加对 Migration().enumerate(_:_:) 的调用:

func configureRealm(){

        Realm.Configuration.defaultConfiguration = Realm.Configuration(
            schemaVersion: 1,
            migrationBlock: { migration, oldSchemaVersion in

                migration.enumerate(Settings.className()) { oldObject, newObject in
                    if oldSchemaVersion < 1 {
                        newObject!["identifier"] = NSUUID().UUIDString
                    }
                }
                migration.enumerate(Person.className()) { oldObject, newObject in
                    if oldSchemaVersion < 1 {
                        // change whatever needs to be changed
                    }
                }
        })
    }

或者您可以在 let realm = try Realm() 抛出错误时删除领域文件:

do {
   let realm = try Realm()
   ...
} catch {
   let path = RLMRealmConfiguration.defaultRealmPath()
   try! NSFileManager.defaultManager().removeItemAtPath(path)
}