我有一个包含MyGroup
列表的模型。
fileprivate let groups: List<MyGroup>
MyGroup
继承自Realm的Object
。它有一个计算属性percentage
和一个属性oldPercentage
,用于存储最后一个计算属性。我不想将其保存到数据库中,所以我忽略它。
class MyGroup: Object {
override static func ignoredProperties() -> [String] {
return ["oldPercentage"]
}
dynamic var oldPercentage: Double = 0
var percentage: Double {
//does some basic calculations
}
dynamic var name: String = ""
}
问题出在下面的代码片段中。
do {
let group = groups[indexPath.row]
//group.percentage = 0.5, group.name = "Hi"
try realm.write {
group.oldPercentage = group.percentage
print(group.oldPercentage) //prints 0.5
print(groups[indexPath.row].oldPercentage) //prints 0.0
groups[indexPath.row].oldPercentage = group.percentage
print(groups[indexPath.row].oldPercentage) //prints 0.0
groups[indexPath.row] = group
print(groups[indexPath.row].oldPercentage) //prints 0.0
group.name = "Test"
print(groups[indexPath.row].name) //prints "Test"
}
catch { ... }
我基本上想要获取group
,更改oldPercentage
属性并将其传回我的UICollectionView
。
我收到group
选择的indexPath
。这很好,并给了我正确的group
。然后,我想将oldPercentage
的值更改为percentage
。当我在局部变量group
上执行此操作时,它会正确更改其值。但是,groups
列表中的对象不更新。
我还试图在不创建局部变量的情况下更改组的oldPercentage
值。我没想到与上面的代码有不同的行为,而且没有。
我的最后一次尝试是将成功打印出正确group
的{{1}}对象分配到oldPercentage
的群组。它也没用。
使用数据库中保存的indexPath
属性时,对象的行为与预期一致,并且值正确更新。
我需要做些什么来更新name
中的group
?
答案 0 :(得分:1)
Realm忽略的属性特定于每个对象实例,索引List
每次都返回一个新对象。您需要不要忽略oldPercentage
或将您设置oldPercentage
的实例直接传递给需要阅读的内容。