1

我有一个模型,其中包含一个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. 然后,我想更改 to 的oldPercentagepercentage。当我对局部变量执行此操作时group,它会正确更改其值。但是,groups列表中的对象不会更新。

我还尝试在oldPercentage不创建局部变量的情况下更改组的值。我没想到会出现与上面代码不同的行为,但事实并非如此。

我最后一次尝试是将group成功打印正确的对象分配oldPercentageindexPath. 它也没有工作。

使用name保存在数据库中的属性时,对象会按预期运行,并且值会正确更新。

我该怎么做才能更新我groupList

4

1 回答 1

1

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

于 2017-03-14T17:36:47.773 回答