sch*_*mru 2 migration realm ios swift
所以我有Realm对象
class RegistrationPlateDB: RLMObject {
dynamic var registrationPlate : String = ""
dynamic var user : String = ""
override static func primaryKey() -> String? {
return "registrationPlate"
} ...
Run Code Online (Sandbox Code Playgroud)
并希望将其更改为
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"
} ....
Run Code Online (Sandbox Code Playgroud)
所以我写了一个迁移
migration.enumerate(RegistrationPlateDB.className()) { oldObject, newObject in
newObject!["name"] = ""
newObject!["user"] = ""
newObject!["registrationPlate"] = ""
newObject!["plateID"] = -1
newObject!["primaryKeyProperty"] = "plateID";
}
Run Code Online (Sandbox Code Playgroud)
但是我可能会因为primaryKey更改而收到错误消息,因为如果我将该行留在外面,它会起作用,但是主键不会更改。
有人可以告诉我如何更改primaryKey的任何想法。
编辑:第一个对象是为Objective-c领域编写的
EDIT2:还是有人知道我如何使PlateID自动递增
来自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)
}
Run Code Online (Sandbox Code Playgroud)
如果您想为分配序列号plateID,例如:
var plateID = 0
migration.enumerate(RegistrationPlateDB.className()) { oldObject, newObject in
newObject!["user"] = oldObject!["user"]
newObject!["plateID"] = plateID
plateID += 1
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1887 次 |
| 最近记录: |