【问题标题】:Array of Results<> changing its element positions after deletion using RealmResults<> 数组在使用 Realm 删除后更改其元素位置
【发布时间】:2018-12-14 00:34:32
【问题描述】:

我正在使用领域来处理来自数组的持久数据:

var listArray: Results<Category>?

当我删除 listArray 的第一个元素时,我的数组的最后一个元素移动到位置 0。有没有办法改变这一点,让每个元素移动到“位置-1”,而不是?

下面是正在发生的事情的一个例子:

删除第一项之前的listArray(“Item 0”):

Optional(Results<Category> <0x7f89dd637250> (
[0] Category {
    listName = Item 0;
    categoryColorHex = #EDF1F2;
    items = List<Item> <0x600001dd9b00> (

    );
},
[1] Category {
    listName = Item 1;
    categoryColorHex = #E57D22;
    items = List<Item> <0x600001dd8a20> (

    );
},
[2] Category {
    listName = Item 2;
    categoryColorHex = #A38570;
    items = List<Item> <0x600001dd8fc0> (

    );
}
)) 

删除“项目0”后:

Optional(Results<Category> <0x7f89dd637250> (
    [0] Category {
        listName = Item 2;
        categoryColorHex = #A38570;
        items = List<Item> <0x600001dd9050> (

        );
    },
    [1] Category {
        listName = Item 1;
        categoryColorHex = #E57D22;
        items = List<Item> <0x600001ddb840> (

        );
    }
))

如您所见,我的数组中的最后一个元素第 2 项现在占据了第一个位置。 这是删除东西的代码:

if listArray?[indexPath.row] != nil {
    do {
        try self.realm.write {
            self.realm.delete(listArray![indexPath.row])
        }} catch {
            print("error at editActionsForRowAt: \(error)")
    }
    //print("\(listArray) \n \n")
} 

其他操作(保存和加载)在领域中运行良好。

问候, FS

【问题讨论】:

  • 移除时,数组会被剩余元素重新分配,如果您需要排序结果,您应该自行排序。

标签: swift realm


【解决方案1】:

除非您在 Results 实例上调用 sorted(byKeyPath:),否则不能保证在 Results 自动更新之后保持元素的顺序。

因此,为了实现您的目标,您需要根据Category 的属性之一对您的Results 实例进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2020-01-01
    • 2017-02-03
    • 2017-12-09
    • 2018-08-16
    相关资源
    最近更新 更多