领域列表中的对象未更新

时间:2017-03-14 11:19:05

标签: swift realm realm-list

我有一个包含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

1 个答案:

答案 0 :(得分:1)

Realm忽略的属性特定于每个对象实例,索引List每次都返回一个新对象。您需要不要忽略oldPercentage或将您设置oldPercentage的实例直接传递给需要阅读的内容。