Problem mit Drag-Drop von NSTableView zum Finder

8

Ich habe eine App mit NSTableView erstellt, die eine Reihe von Dateien darstellt. Daher möchte ich in der Lage sein, eine Zeile (d. H. Einen Dateinamen) aus meinem NSTableView in den Finder zu ziehen, und die Datei wird in diesem Ordner erstellt. Das Bit, das ich nicht ausarbeiten kann, ist, dass ich den Inhalt der Originaldatei ändern muss, bevor sie in den Finder kopiert wird.

Ich habe die folgende Zeile hinzugefügt, damit ich aus meiner NSTableView ziehen kann:

%Vor%

Und ich kann es bekommen, um die tatsächliche Datei zu kopieren, vorausgesetzt, ich füge der Einfügeablage einen aktuellen Speicherort hinzu:

%Vor%

Da ich jedoch den Inhalt der Datei ändern möchte, möchte ich keine Dateipfade in die Zwischenablage einfügen. Ich habe versucht, NSFileWrapper zu verwenden, aber Finder scheint dies nicht als gültiges Format zu akzeptieren.

Ich habe Google überprüft und mehrere Vorschläge gefunden, mit denen Sie eine temporäre Datei erstellen und diesen Dateipfad verwenden können. Aber das fühlt sich hässlich an.

Ist es möglich, Daten an Finder zu senden? Gibt es eine Möglichkeit, das zu lösen?

    
RichS 13.07.2011, 05:45
quelle

2 Antworten

17

Sie werden höchstwahrscheinlich Verplichtungsdateien verwenden wollen oder NSFilesPromisePboardType statt NSFilenamesPboardType . (Hinweis: Die Methoden der provide-Datei dragPromisedFilesOfTypes:fromRect:source:slideBack:event: und namesOfPromisedFilesDroppedAtDestination: , über die diese Dokumentation spricht, sind die generischen NSView -Methoden.% Co_de% definiert bequemere Methoden, die Sie anstelle der generischen verwenden. Das sollte gesagt werden geben Sie immer noch Informationen darüber an, wie die Datei-Drag-Funktion funktioniert. NSTableView verwendet NSTableView , wo Sie die Verarbeitung Ihrer Dateien vornehmen können. In Ihrer tableView:namesOfPromisedFilesDroppedAtDestination:forDraggedRowsWithIndexes: -Methode deklarieren Sie tableView:writeRowsWithIndexes:toPasteboard: und legen dann ein Array mit Dateinamenserweiterungen für die Dateitypen fest, die Sie schreiben möchten. Der folgende Pseudocode beschreibt, wie Sie sich diesem annähern könnten:

%Vor%

Dann in Ihrer Name-of-provedFiles-Methode:

%Vor%

Sie sollten in der Lage sein, den ursprünglichen Dateipfad zu berechnen (nicht sicher, wie Sie ihn ermitteln, also habe ich ihn im obigen Code NSFilesPromisePboardType gelassen) und den Zieldateipfad (mit etwas wie im obigen Code).

    
NSGod 13.07.2011, 07:17
quelle
5

Etwas, auf das Sie achten sollten.

In NSPasteboard.h gibt es einen Kommentar, der sagt:

%Vor%

Und nachdem die NSFilesPromisePboardType Definition sagt:

%Vor%

Ich habe gerade ein paar Stunden damit verbracht, meinen Kopf gegen eine Wand zu schlagen, weil ich an einigen Stellen in (NSString *)kPasteboardTypeFileURLPromise statt in NSFilesPromisePboardType vorbeigekommen bin.

Es sieht so aus, als würden sie nicht dasselbe machen. Ich konnte nicht herausfinden warum:

%Vor%

wurde nicht angerufen. Als ich zurück zu NSFilesPromisePboardType wechselte,
plötzlich hieß es.

    
Sam Deane 24.10.2011 15:54
quelle