2

Apple のこの例のようなディスク (ファイル システム) 階層を示すアウトライン ビュー テーブルを作成しました。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/OutlineView/Articles/UsingOutlineDataSource.html#//apple_ref/doc/uid/20000725-142693

ここで、ファイル/フォルダーをアウトライン ビューから、Finder、Xcode、iTunes などのドロップを受け入れる他のアプリケーションにドラッグできるようにしたいと考えています。これらは、NSOu のデータ ソースに実装している機能です。

let pb: NSPasteboard?
func outlineView(outlineView: NSOutlineView, writeItems items: [AnyObject], toPasteboard pasteboard: NSPasteboard) -> Bool {
    var array = [NSURL]()
    self.pb?.declareTypes([NSFilesPromisePboardType], owner: self)
    if let fileItem = items[0] as? FileSystemItem {
        let fileURL = NSURL(fileURLWithPath: fileItem.getFullPath()!)
        array.append(fileURL)
        self.pb?.addTypes([fileURL.pathExtension!], owner: nil)
        self.pb?.writeObjects(array)
        return true
    }else {
        return false
    }
}
func outlineView(outlineView: NSOutlineView, namesOfPromisedFilesDroppedAtDestination dropDestination: NSURL, forDraggedItems items: [AnyObject]) -> [String] {
    var names = [String]()
    if let fileItem = items[0] as? FileSystemItem {
        print(fileItem.getRelativePath())
        names.append(fileItem.getRelativePath()!)
        return names
    }else {
        return names
    }
}

現在、コンソールでこのエラーが発生しています

Looked for HFSPromises on the pasteboard, but found none.

最後に、これは私が持っているもののスクリーンショットです - ファイルシステムを示す NSOutlineView

4

1 に答える 1

1

ファイルが存在せず、受信者が指定した場所にファイルを作成しない限り、promise を使用しないでください。単一のファイルの場合は、NSURLPboardType を使用します。複数のファイルの場合は、NSFilenamesPboardType を使用します。

于 2016-08-03T16:59:07.817 に答える