我有一个领域对象:
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"
}
}
在领域商店中创建此对象
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,但数量仍为2。 为什么数量仍然是2?它将始终返回第一个存储值,我不明白为什么。请帮忙。
上的演示项目答案 0 :(得分:0)
这里发生的事情是,quantity
属性并未包含在ignoredProperties()
中,以让Realm知道不要坚持它,但它也没有被标记{ {1}},它使Realm能够管理属性。
所以它处于这种不支持的中间状态。我建议你将该属性标记为忽略:
dynamic
请注意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}"
}