Ios 使用非规范化数据的领域迁移
假设您有一个领域对象,如Ios 使用非规范化数据的领域迁移,ios,swift,realm,Ios,Swift,Realm,假设您有一个领域对象,如 class Person: Object { var dynamic firstName: String = "" var dynamic lastName: String = "" } 现在,我想升级数据库并将lastName提取到一个新类中,如下所示 class LastName: Object { var dynamic sirName: String = "" override public class func primar
class Person: Object {
var dynamic firstName: String = ""
var dynamic lastName: String = ""
}
现在,我想升级数据库并将lastName提取到一个新类中,如下所示
class LastName: Object {
var dynamic sirName: String = ""
override public class func primaryKey() -> String {
return "sirName"
}
}
class Person: Object {
var dynamic firstName: String = ""
var dynamic lastName: LastName!
}
迁移会是什么样子?我尝试了一个简单的迁移,但这可能会导致多个LastName对象使用相同的primaryKey 在您的
AppDelegate
的中,使用选项完成启动:
let configuration = Realm.Configuration(
schemaVersion: 1, //This must be larger than the previous schemaVersion
migrationBlock: { migration, oldSchemaVersion in
if oldSchemaVersion < 1 {
migration.enumerate(Person.className()) { oldObject, newObject in
let lastName = oldObject!["lastName"] as! String
let newValue: [String: String] = ["sirName": lastName]
let createdObject = migration.create(LastName.className(), value: newValue)
newObject!["lastName"] = createdObject
}
}
})
Realm.Configuration.defaultConfiguration = configuration // Set the new configuration as default
let realm = try! Realm() // Open the default realm to perform the migration
但是,如果存在重复的lastName
,则此迁移将不起作用,因为primaryKey
是每个对象的唯一标识符,因此您应该确保永远不会有重复,为primaryKey
使用另一个属性,或者在LastName
对象中根本不使用primaryKey
。这不起作用。它正在尝试为新对象设置字典![“姓氏”]property@NoName抱歉,修复了它,它现在可以正常工作了!我相信这仍然可能会给出具有相同primaryKey的重复Lastname对象,从而给出一个errorYes,您是对的。但前提是姓氏有重复的值,我不确定为什么要限制对象对于每个唯一的对象只能有一个值,特别是如果我们实际上谈论的是姓氏。如果你知道你不会有重复的,那么这个方法会起作用。@NoName看到我的扩展答案,它会澄清你关于这个的任何问题。
class Person: Object {
dynamic var firstName: String = ""
dynamic var lastName: LastName!
}
class LastName: Object {
dynamic var sirName: String = ""
override static func primaryKey() -> String? {
return "sirName"
}
}