如上图所示,索引按序列增加一个。当我删除一个索引(除了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)")
}
}
并在控制台中打印:
before 6
update 5
before 4
update 3
before 5
update 4
见?值实际上已更新,但领域数据库仍保持索引不变,其序列变得混乱(我也想知道为什么 - !以及如何将它们保持在相同的序列中)。
感谢您的帮助!
答案 0 :(得分:1)
var realmIndex = item.index
表示item.index
已复制到realmIndex
。无论您更改了多少复制值,它都不会影响原始对象。要更新Realm的值,请再次分配它或直接操作属性而不是复制的值。
再次分配
try! self.defaultRealm.write {
realmIndex -= 1
item.index = realmIndex
}
直接操纵属性
try! self.defaultRealm.write {
item.index -= 1
}
对于序列,与其他数据库一样,Realm不保持顺序。如果您希望按顺序获得结果,则需要使用sorted()
方法进行显式排序。或者,使用Realm的List<T>
代替。 List<T>
保留订单。