gpt4 book ai didi

swift - 在核心数据中保存行号并按 desc 排序

转载 作者:行者123 更新时间:2023-11-30 12:06:02 25 4
gpt4 key购买 nike

我正在使用 macOS 的 swift 4,并将数据从核心数据获取到 NSTableview 中。

现在我想保存数据的顺序。示例:

MyCoreData1 (Row 1)
MyCoreData2 (Row 2)
MyCoreData3 (Row 3)
MyCoreData4 (Row 4)

现在我通过拖放对其进行排序,如下所示:

MyCoreData1 (Row 3)
MyCoreData2 (Row 2)
MyCoreData3 (Row 1)
MyCoreData4 (Row 4)

如何将这个新订单保存到核心数据中?目前我的实体中有一个属性“sortNumber”

MyCoreData1 (sortNumber 10)
MyCoreData2 (sortNumber 20)
MyCoreData3 (sortNumber 30)
MyCoreData4 (sortNumber 40)

我将按 sortNumber“Desc”对其进行排序但如果我重新排序,我必须构建一个复杂的(我猜会很复杂)逻辑来将每个元素的 sortNumber 更改为新的排序顺序。

您有什么想法可以解决这个问题吗?

拖动行代码

func tableView(_ tableView: NSTableView, acceptDrop info: NSDraggingInfo, row: Int, dropOperation: NSTableView.DropOperation) -> Bool {
let pasteboard = info.draggingPasteboard()
let pasteboardData = pasteboard.data(forType: NSPasteboard.PasteboardType.string)

if let pasteboardData = pasteboardData {

if let rowIndexes = NSKeyedUnarchiver.unarchiveObject(with: pasteboardData) as? IndexSet {
var oldIndexOffset = 0
var newIndexOffset = 0

for oldIndex in rowIndexes {

if oldIndex < row {
tableView.moveRow(at: oldIndex + oldIndexOffset, to: row - 1)
oldIndexOffset -= 1
} else {
tableView.moveRow(at: oldIndex, to: row + newIndexOffset)
newIndexOffset += 1
}
}
}
}

return true
}

最佳答案

如果您需要保持特定顺序,则必须将索引保存为核心数据中的属性。

重新索引记录的逻辑并不复杂。每当顺序更改时,都会根据 TableView 中的位置更新 index 属性并保存上下文(假设 items 是数据源数组,并且 NSManagedObject 子类有一个属性 index):

func reindex()
{
for (index, item) in items.enumerated() {
item.index = Int32(index)
}
saveContext()
}

获取数据时按索引对记录进行排序

关于swift - 在核心数据中保存行号并按 desc 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com