Swift NSTableview拖动选择多行,而不是从表中拖出

Swift NSTableview拖动选择多行,而不是从表中拖出,swift,macos,drag-and-drop,nstableview,Swift,Macos,Drag And Drop,Nstableview,我正在尝试从NSTableView中拖动文件并将其放到Finder中。当我尝试拖动一行时,除了在向下拖动表格时选择多行之外,什么也不会发生。表的初始代码为: filesList.delegate = self filesList.dataSource = self filesList.doubleAction = #selector(doubleClick) filesList.registerForDraggedTypes([.fileURL]) let descriptorName = NS

我正在尝试从NSTableView中拖动文件并将其放到Finder中。当我尝试拖动一行时,除了在向下拖动表格时选择多行之外,什么也不会发生。表的初始代码为:

filesList.delegate = self
filesList.dataSource = self
filesList.doubleAction = #selector(doubleClick)
filesList.registerForDraggedTypes([.fileURL])
let descriptorName = NSSortDescriptor(key: "name", ascending: true)
let descriptorSize = NSSortDescriptor(key: "size", ascending: true)
let descriptorAttr = NSSortDescriptor(key: "attr", ascending: true)
filesList.tableColumns[0].sortDescriptorPrototype = descriptorName
filesList.tableColumns[1].sortDescriptorPrototype = descriptorSize
filesList.tableColumns[2].sortDescriptorPrototype = descriptorAttr
filesList.setDraggingSourceOperationMask([.copy], forLocal: false)
后来,我有了这段代码,但现在做的不多。我希望这将给我的路径,该文件夹已被删除

func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
    guard let board = pboard.propertyList(forType: NSPasteboard.PasteboardType(rawValue: "NSFilesPromisePboardType ")) as? NSArray,
        let path = board[0] as? String
        else { return false }
    print(path)
    return true
}
更新 多亏了下面威勒克的提示,我几乎可以让它工作了。以下是我的更新代码:

func tableView(_ tableView: NSTableView,pasteboardWriterForRow row: Int)-> NSPasteboardWriting?
{
    var filePaths = [String]()
    let item = NSPasteboardItem()
    let folderPath = URL(fileURLWithPath: NSTemporaryDirectory())

    let toPath = folderPath.absoluteString.replacingOccurrences(of: "file://", with: "")
    for (_, index) in filesList.selectedRowIndexes.enumerated() {
        var fileName = files[index].name
        if self.dirPath != "" {
            fileName = "\(self.dirPath)/\(fileName)"
        }
        let command="\"\(getImgTool())\" get \(self.format) \"\(self.path)\" \"\(fileName)\" \"\(toPath)\(fileName)\""
        //                    let command = "cd ~; \(self.getImgTool()) put \(self.format) \(self.path) \(fileName) \(filePath)"

        let _ = shell(command)
        filePaths.append("\(toPath)\(fileName)")
    }

    item.setPropertyList(filePaths, forType: .fileURL)

    return item
}

我现在遇到的问题是发现者不会接受投递。Xcode报告“flavor public.file-url需要立即使用沙盒扩展数据,但无法获取。”因此,我将.fileURL更改为.url,查找程序接受它,但文件未写入/复制。我遗漏了什么?

提示:使用
tableView(\uu:pasteboardWriterForRow:)
而不是
tableView(\uu:Writerowwith:to:)
并返回url。更多提示:返回行
中项目的
url
,而不是所有选定行的列表。使用
URL
方法而不是路径字符串来构造
URL
。提示:使用
tableView(u:pasteboardWriterForRow:)
而不是
tableView(u:writeRowsWith:to:)
并返回URL。更多提示:返回行
行中项目的
URL
,而不是所有选定行的列表。使用
URL
方法而不是路径字符串来构造
URL