2016-12-17 35 views
0

enter image description here为什么realm数据库属性值不更改?

如上图所示,索引增加一个序列。当我删除一个索引(0除外),比如3时,我希望所有的索引仍然会按顺序通过0〜5,这意味着保持不变,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

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 
    } 
    

对于序列,作为同其他数据库,境界不守秩序。如果您想按顺序获得结果,则需要使用sorted()方法进行明确排序。或者,使用Realm的List<T>代替。 List<T>保持订单。

+0

谢谢!第一个问题解决了。你知道如何修复对象的序列吗?像上面一样,0,1,2,3,4,5,6,当我删除索引3时,我希望序列为0,1,2,4,5,6,但不是0,1,2,6 ,4,5,我需要将该索引作为pageController的页面引用,奇怪的序列更改会使页面混淆。 – stephen

+0

@steve 对于序列,与其他数据库相同,Realm不保留顺序。如果您想要按顺序获得结果,则需要使用'sorted()'方法进行显式排序。或者,使用Realm的'List '代替。 '清单'保持订单。我也编辑了我的答案。 –