SwiftUI 移动列表单元格并在 CoreData 数据库中填充顺序

Posted

技术标签:

【中文标题】SwiftUI 移动列表单元格并在 CoreData 数据库中填充顺序【英文标题】:SwiftUI move list cells and populate order in CoreData database 【发布时间】: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 个元素对我来说毫无意义。

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

我是不是做错了什么?

【问题讨论】:

【参考方案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。 非常感谢,我现在明白了!

以上是关于SwiftUI 移动列表单元格并在 CoreData 数据库中填充顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何移动表格单元格并显示图像?

选择特定范围的单元格并仅删除突出显示的单元格并向上移动的 VBA

目标 C:如何突出显示 tableView 单元格并在重新加载表格时保持突出显示?

在gridview中查找行的单元格并在RowDataBound上执行某些操作

如何实现(几乎)全视图 uitableview 可以滚动过去最后一个单元格并在 iOS 中显示更多元素

读取 df,拆分每个单元格并附加到列表