Realm快速更改primaryKey

2024-02-19

所以我有 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";  
 }

但我收到一个错误,可能是因为主键更改,因为如果我保留该行,它可以工作,但主键不会更改。

有人可以告诉我如何更改主键吗?

编辑:第一个对象是为 Objective-c 领域编写的

EDIT2:或者如果有人知道我怎样才能使plateID自动增量


来自 Realm 的胜美在这里。您不需要尝试更改迁移块中的主键。

我们总是自动将架构更新到最新版本,您在迁移块中唯一需要处理的就是调整数据以适应它(例如,如果您重命名一个属性,则必须将数据从旧属性复制到新版本)迁移块中的新一个)。

So 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Realm快速更改primaryKey 的相关文章

随机推荐