我如何可以拖动文件夹/目录项目从NSOutlineView像Finder或Xcode中的应用

我如何可以拖动文件夹/目录项目从NSOutlineView像Finder或Xcode中的应用

问题描述:

我创建了一个大纲视图表中显示我的磁盘(文件系统)的层次结构类似于从苹果公司的例子:我如何可以拖动文件夹/目录项目从NSOutlineView像Finder或Xcode中的应用

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 showing file system

,除非该文件不存在,您将创建不要使用承诺它位于收件人指定的位置。如果它是单个文件,则使用NSURLPboardType。对于多个文件,请使用NSFilenamesPboardType。