【问题标题】:SwiftUI move list cells and populate order in CoreData databaseSwiftUI 移动列表单元格并在 CoreData 数据库中填充顺序
【发布时间】:2020-08-05 16:19:22
【问题描述】:

我在移动单元格并将订单保存在 CoreData 数据库中时遇到问题。我已经从 UI 角度开始工作,但我不明白如何在核心数据中反映它。移动的列表实体在 CoreData 中具有 orderPriority 属性,它是我想在移动操作时更改的 Int。

附加到列表的移动方法是这样的:

func move(from source: IndexSet, to destination: Int)

似乎源和目标是两个不同的东西,例如 将第一个单元格移动到第三个位置给出源 = 0 和目标 = 3,但是 将第三个单元格移动到第一个位置给出 source=2 和 destination=0,数组目标中只有 3 个元素对我来说毫无意义。

源看起来像数组索引,但目标是我无法理解的,这就是为什么我不能将核心数据实体更改为相应的顺序。

我是不是做错了什么?

【问题讨论】:

    标签: swift swiftui swiftui-list


    【解决方案1】:

    ...但是将第三个单元格移动到第一个位置会给出 source=2 和 destination=0,数组目标中只有 3 个元素对我来说毫无意义。

    数组索引从零开始,source=2 是第三个元素,destination=0 是第一个元素。索引 2 变为 0,索引 0 变为 1,索引 1 变为 2。

    顺便说一下源的类型是IndexSet,您可以将非后续索引处的多个项目移动到目标索引。

    默认情况下,Core Data 记录是无序的。如果实体中有索引属性,则必须重新索引记录,至少从已更改的第一个索引开始。

    【讨论】:

    • 您确实指出了一个缺陷,我决定从核心数据实体创建一个实际数组,然后应用本机快速移动功能并通过实体 ID 更改数据库中的顺序。我确实理解了我给出的第二个示例,但为什么第一个示例中的 destination=3?
    • destination=3 是最后一项之后的索引,destination=2 是最后一项之前的索引。想象一个空数组,只有一个可用的插入索引,索引 0。
    • 非常感谢,我现在明白了!
    猜你喜欢
    • 2019-12-23
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多