Ziehen Sie Dateien über Sandbox (__ CFPasteboardIssueSandboxExtensionForPath)

8

Ich habe den Drag-Vorgang von der Browser-Ansicht zur benutzerdefinierten Ansicht verarbeitet. Er funktioniert gut in Snow lepoard, aber nicht in Mountain Lion mit Sandbox.

%Vor%

meine Frage ist:

1.wie, um diesen Fehler zu beheben __CFPasteboardIssueSandboxExtensionForPath; Ich verweise die Dokumente und nichts darüber gefunden.Ich bin davon überzeugt, dass ich die Berechtigung zum Zugriff auf die Datei haben! google sagt, kann "startAccessingSecurityScopedResource" wird mir helfen, dann versuche ich es und fehlgeschlagen

2. warum pasteboardItems2 Wert haben? Ich schreibe nur in pasteboard url aber nicht string.Es hat mich angewidert, dass ich die URL sowohl von NSString-Typ und NSUrl-Typ bekommen kann! (Ich versuche, eine Datei aus dem iFinder zu ziehen, die URL existiert nur in pasteboardItems, aber nicht in pasteboardItems2). Weiß jemand warum? Ich denke, das erste Problem wird automatisch behoben, wenn jemand mir hilft, dieses Problem zu beheben.

    
Achilles Wang 09.08.2012, 10:54
quelle

4 Antworten

1

Ich glaube Apple beantworten Frage 1:

  

Wichtig : Sie können das Ziehen von Dateipfaden im Allgemeinen unterstützen.   Sie sollten dies vermeiden, es sei denn, Sie sind sich sicher, dass das Ziel ist   Die App wird niemals in einer App-Sandbox ausgeführt. Wenn Sie einen NSString, OS X verwenden   hat keine Möglichkeit zu wissen, ob diese Zeichenfolge als a interpretiert werden soll   Pfad; Daher erweitert OS X die Sandbox der Zielanwendung nicht auf   Erlaube Zugriff auf die Datei oder das Verzeichnis an diesem Ort. Verwenden Sie stattdessen   ein NSURL-, ein Lesezeichen- oder ein Dateiname-Pinnwandtyp.

WRT zu Frage 2, es sieht so aus, als ob Sie URLs eingefügt haben, sodass das Lesen von NSURL -Objekten korrekt zu sein scheint. Ich denke jedoch, dass Sie das Ziehen mit dem folgenden Code implementieren sollten (auch über den obigen Link):

%Vor%     
trojanfoe 29.11.2012 12:56
quelle
1

Sie müssen generieren auf der Senderseite URL-Lesezeichensicherheitsdaten und diese Daten in eine URL zurückverwandeln auf der Empfängerseite. Es gibt einige andere Dinge, die Sie danach tun müssen, wenn Sie tatsächlich auf die URL zugreifen möchten. die Dokumentation erarbeitet .

Die empfangende Anwendung kann, wenn sie in einer Sandbox ausgeführt wird, keine leeren Pfade verarbeiten. Dies ist ein zentraler Bestandteil von Sandboxing; Sie dürfen keine leeren Pfade oder die entsprechenden URLs verwenden, um auf Dateien zuzugreifen, die sich nicht in Ihrem Sandbox-Container befinden und Ihnen nicht explizit vom Benutzer übergeben wurden.

    
Peter Hosey 18.12.2012 08:53
quelle
0

Ihr pasteboardItems Lese-Objekt vom NSString-Typ, aber Sie haben eine Datei (mit jpg-Erweiterung) gezogen, Sie sollten sich für den NSString-Typ in Ihrer init-Methode registrieren:

%Vor%     
Mil0R3 31.08.2012 00:44
quelle
0

Sie müssen Dokumenttypen in Ihrer Anwendung definiert haben, damit der Sandboxing-Mechanismus weiß, dass Ihre Anwendung Dateien mit diesen Erweiterungen öffnen sollte. Sie können dies tun, indem Sie in Xcode auf das Projekt links klicken und auf der Registerkarte Info unter Dokumenttypen einen neuen Dokumenttyp für jede Erweiterung hinzufügen.

Sie müssen nur das Feld name und extensions ausfüllen.

Auch wenn Sie Ihre Berechtigung zum Zugriff auf die in Ihre Anwendung gezogenen Dateien beibehalten möchten, können Sie diese Klasse verwenden, um die gesamte Logik zu verarbeiten. Ссылка

    
Leigh McCulloch 23.11.2013 14:56
quelle