为什么领域数据库属性值不会改变?

时间:2016-12-17 10:46:04

标签: swift realm

enter image description here

如上图所示,索引按序列增加一个。当我删除一个索引(除了0),就像3一样,我希望所有索引仍然会在序列中通过0~5,这意味着1& 2保持不变,4减少到3,5-> 4,6-> 5。下面是我的代码:

let defaultRealm = try! Realm()
let currentRealm = self.defaultRealm.objects(CurrentRealmObject.self)

let remainedItems = currentRealm.filter("index > \(indexPath.row)")

for item in remainedItems {
    var realmIndex = item.index
    print("before \(realmIndex)")

    try! self.defaultRealm.write {
        realmIndex -= 1
        print("update \(realmIndex)")
    }   
}

删除索引3后,域数据库变为: enter image description here

并在控制台中打印:

 before 6
 update 5
 before 4
 update 3
 before 5
 update 4

见?值实际上已更新,但领域数据库仍保持索引不变,其序列变得混乱(我也想知道为什么 - !以及如何将它们保持在相同的序列中)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

var realmIndex = item.index表示item.index已复制到realmIndex。无论您更改了多少复制值,它都不会影响原始对象。要更新Realm的值,请再次分配它或直接操作属性而不是复制的值。

  1. 再次分配

    try! self.defaultRealm.write {
        realmIndex -= 1
        item.index = realmIndex
    }
    
  2. 直接操纵属性

    try! self.defaultRealm.write {
        item.index -= 1
    }
    
  3. 对于序列,与其他数据库一样,Realm不保持顺序。如果您希望按顺序获得结果,则需要使用sorted()方法进行显式排序。或者,使用Realm的List<T>代替。 List<T>保留订单。