tableView和Realm数据库之间的差异

时间:2016-11-20 17:17:37

标签: ios uitableview realm

在实施滑动删除功能时,我遇到以下问题: 当我删除项目时,数组中的最后一项占据了它的位置。

所以例如我有数组[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)
        }
    }

我真的很感谢你的帮助!

2 个答案:

答案 0 :(得分:3)

请注意,Results无法保证保留插入顺序。出于性能原因,可以重新排序项目以保持Realm文件较小,或者保持操作快速。

List属性 保证保留其插入顺序。

如果您想要稳定订购Results,请务必对其进行排序。

这在Realm的sorting文档中有所介绍。

答案 1 :(得分:2)

由于您使用的是realm.delete而不是myList.remove,我认为itemToDelete是一个独立的对象,而不是领域列表中的实例。领域列表中的项目序列是有保证的,但不能用于检索对象。因此,如果您只是使用realm.objects,则无法保证序列,除非您应用自己的过滤器。

我假设您正在使用Realm浏览器并期望序列匹配,但它不会。