2016-07-29 3 views
2

J'ai créé une table de vue contour qui montre mon disque (système de fichiers) hiérarchie similaire à cet exemple d'Apple:Comment puis-je faire glisser un dossier/élément de répertoire à partir d'un NSOutlineView à une application comme Finder ou Xcode

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

maintenant, je veux être en mesure de faire glisser des fichiers/dossiers de mon point de vue de grandes lignes à d'autres applications qui acceptent les gouttes comme Finder, Xcode, iTunes etc. ce sont les fonctions que je suis mise en œuvre pour ma source de données pour 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 
    } 
} 

Je reçois actuellement cette erreur sur la console

Looked for HFSPromises on the pasteboard, but found none. 

Enfin, c'est une capture d'écran de ce que j'ai - NSOutlineView showing file system

Répondre

1

Ne pas utiliser des promesses à moins que le fichier n'existe pas et vous allez créer à un endroit spécifié par le destinataire. S'il s'agit d'un fichier unique, utilisez NSURLPboardType. Pour plusieurs fichiers, utilisez NSFilenamesPboardType.