2016-07-29 15 views
2

Я создал таблицу контурный вид, который показывает мой диск (файловая система) иерархия похожа на данном примере от Apple:Как я могу перетащить элемент папку/директорию из 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

ответ

1

Не используйте обещание, если файл не существует, и вы будете создавать это в месте, указанном получателем. Если это один файл, используйте NSURLPboardType. Для нескольких файлов используйте NSFilenamesPboardType.