领域迁移:更新多个对象和回退策略?
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)
}
我不明白如何迁移多个对象。例如,如何在对象设置和人员上引入字符串 "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)
}