在实施滑动删除功能时,我遇到以下问题: 当我删除项目时,数组中的最后一项占据了它的位置。
所以例如我有数组[1,2,3,4,5]。删除2(索引1)后,数据库中的数组看起来为[1,5,3,4]。但表视图显示一切正确[1,3,4,5]。为什么会这样?我希望Realm项目以这种方式保存[1,3,4,5]。
如果函数实现如下:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
try! realm.write {
let itemToDelete = items[indexPath.row]
realm.delete(itemToDelete)
}
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Top)
}
}
我真的很感谢你的帮助!
答案 0 :(得分:3)
请注意,Results
无法保证保留插入顺序。出于性能原因,可以重新排序项目以保持Realm文件较小,或者保持操作快速。
List
属性 保证保留其插入顺序。
如果您想要稳定订购Results
,请务必对其进行排序。
这在Realm的sorting文档中有所介绍。
答案 1 :(得分:2)
由于您使用的是realm.delete
而不是myList.remove
,我认为itemToDelete
是一个独立的对象,而不是领域列表中的实例。领域列表中的项目序列是有保证的,但不能用于检索对象。因此,如果您只是使用realm.objects
,则无法保证序列,除非您应用自己的过滤器。
我假设您正在使用Realm浏览器并期望序列匹配,但它不会。