所以我有Realm对象
class RegistrationPlateDB: RLMObject {
dynamic var registrationPlate : String = ""
dynamic var user : String = ""
override static func primaryKey() -> String? {
return "registrationPlate"
} ...
并希望将其更改为
class RegistrationPlateDB: Object {
dynamic var plateID : Int = -1
dynamic var registrationPlate : String = ""
dynamic var name : String = ""
dynamic var user : String = ""
override static func primaryKey() -> String? {
return "plateID"
} ....
所以我写了一篇文章
migration.enumerate(RegistrationPlateDB.className()) { oldObject, newObject in
newObject!["name"] = ""
newObject!["user"] = ""
newObject!["registrationPlate"] = ""
newObject!["plateID"] = -1
newObject!["primaryKeyProperty"] = "plateID";
}
但是我得到一个错误可能是因为更改了primaryKey,因为如果我将该行删除它可以工作,但主键不会改变。
有人可以告诉我如何更改primaryKey。
编辑:第一个对象是为Objective-c领域编写的
EDIT2:或者,如果有人知道我怎么能做出plateID自动增量
答案 0 :(得分:4)
来自Realm的Katsumi。您无需在迁移块中尝试更改主键。
我们总是自动将架构更新到最新版本,并且您必须在迁移块中处理的唯一事情就是调整数据以适应它(例如,如果重命名属性,则必须从旧版本复制数据属性到迁移块中的新属性)。
因此不需要newObject!["primaryKeyProperty"] = "plateID";
。
我认为您的迁移块应如下所示:
migration.enumerate(RegistrationPlateDB.className()) { oldObject, newObject in
newObject!["user"] = oldObject!["user"]
newObject!["registrationPlate"] = oldObject!["registrationPlate"]
newObject!["plateID"] = Int(oldObject!["registrationPlate"] as! String)
}
如果您想将序号分配给plateID
,例如:
var plateID = 0
migration.enumerate(RegistrationPlateDB.className()) { oldObject, newObject in
newObject!["user"] = oldObject!["user"]
newObject!["plateID"] = plateID
plateID += 1
}