저는 macOS 용 스위프트 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)
을 내가 핵심 데이터에 새로운 질서를 저장할 수 있습니까? 순간 나는 나의 실체
MyCoreData1 (sortNumber 10)
MyCoreData2 (sortNumber 20)
MyCoreData3 (sortNumber 30)
MyCoreData4 (sortNumber 40)
에 속성 "sortNumber"을하고 난 sortNumber "제품 설명" 하여 정렬합니다 그러나 나는 그것을 다시 정렬하는 경우, 나는 (내가 추측 복잡한을 구축해야 복잡한 것입니다.) 논리를 사용하여 각 요소의 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
}
나는 혼란스러워. 이 코드는 ** UI ** (tableView.moveRow ...)를 업데이트하는 로직을 포함합니다 **. 따라서 데이터 소스 배열을 업데이트하고 설명한대로 레코드를 다시 인덱싱해야합니다. – vadian
첫 번째 게시물을 새 코드로 업데이트했습니다. 이 코드를 사용하면 테이블 뷰를 다시로드하거나 데이터를 다시 가져 오지 않고 드래그 결과를 직접 볼 수 있습니다. 하지만 모르겠다. 어떻게 데이터 객체를 다시 색인 할 수 있을까? 이 상황에 맞는 올바른 코드입니까? – Ghost108
특정 주문이 필요한 몇 가지 (핵심 데이터) 프로젝트에서 직접 사용하고 있습니다. – vadian