gpt4 book ai didi

ios - 具有 getter/setter 的 Realm 对象属性总是返回第一个存储值

转载 作者:行者123 更新时间:2023-11-28 08:29:33 25 4
gpt4 key购买 nike

我有一个 Realm 对象:

class RMovements: Object {
dynamic var name: String!
dynamic var _quantity: Double = 0
var quantity: Double {
get {
return _quantity / 1000
}
set {
_quantity = newValue * 1000
}
}

override static func primaryKey() -> String? {
return "name"
}
}

在 Realm 存储中创建这个对象之后

do {
try realm.write({
let m = RMovements()
m.name = "john"
m.quantity = 2
realm.add(m, update: true)
})
} catch _ {}

结果我得到了

RMovements {
name = john;
_quantity = 2000;
quantity = 2;
}

看起来不错!但现在我想将数量更改为 9

do {
try realm.write({
let m = realm.objects(RMovements).filter("name=%@", "john").last!
m.quantity = 9
realm.add(m, update: true)
})
} catch _ {}

惊喜来了

RMovements {
name = john;
_quantity = 9000;
quantity = 2;
}

_quantity 正确修改为9000,但是quantity还是2。为什么数量还是2?它总是会返回第一个存储值,我不明白为什么。请帮忙。

演示项目可在 GitHub 上获得

最佳答案

这里发生的事情是 quantity 属性没有包含在 ignoredProperties() 中以让 Realm 知道不要持久化它,但它也没有被标记为 dynamic,使 Realm 能够管理属性。

所以它处于不受支持的中间状态。我建议您将该属性标记为已忽略:

class RMovements: Object {
dynamic var name: String!
dynamic var _quantity: Double = 0
var quantity: Double {
get {
return _quantity / 1000
}
set {
_quantity = newValue * 1000
}
}

override static func primaryKey() -> String? {
return "name"
}

override static func ignoredProperties() -> [String] {
return ["quantity"]
}
}

请注意 Object 的默认 description 不包含被忽略的属性,因此要打印它,您需要覆盖它:

override var description: String {
return "RMovements {\n name = \(name);\n _quantity = \(_quantity);\n quantity = \(quantity);\n}"
}

然后,如果我运行您的示例,我将获得以下日志:

created
check: RMovements {
name = john;
_quantity = 2000.0;
quantity = 2.0;
}
before update: RMovements {
name = john;
_quantity = 2000.0;
quantity = 2.0;
}
after update: RMovements {
name = john;
_quantity = 9000.0;
quantity = 9.0;
}
check: RMovements {
name = john;
_quantity = 9000.0;
quantity = 9.0;
}

关于ios - 具有 getter/setter 的 Realm 对象属性总是返回第一个存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39104632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com