结果数组<>,使用Realm删除后更改其元素位置

时间:2018-12-14 00:34:33

标签: swift realm

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

var listArray: Results<Category>?

当我删除listArray的第一个元素时,数组的最后一个元素将移动到位置0。是否有办法更改它,以便每个元素都移到“ position-1”位置?

这是正在发生的事的一个例子:

listArray删除第一个项目(“项目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> (

        );
    }
))

如您所见,Item 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

1 个答案:

答案 0 :(得分:0)

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

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