Ich habe ein Problem beim Speichern einer Zeichenkette mit NSSavePanel
nach dem Sandboxing der App für den Mac App Store. Ich habe com.apple.security.files.user-selected.read-write
auf YES
gesetzt und die NSOpenPanel
funktioniert so, wie sie sollte.
Wenn ich versuche, eine neue Datei zu speichern, scheint es, dass alles gut funktioniert, aber dann gibt es keine gespeicherte Datei, wo es sein sollte ....
Dies ist der Code, den ich zum Speichern der Datei verwende:
%Vor% Ich habe ein Problem beim Speichern einer Zeichenkette mit -[NSSavePanel filename]
nach dem Sandboxing der App für den Mac App Store. Ich habe -[NSSavePanel URL]
auf -[NSString writeToFile:atomically:encoding:error]
gesetzt und die error:(NSError**)
funktioniert so, wie sie sollte.
Wenn ich versuche, eine neue Datei zu speichern, scheint es, dass alles gut funktioniert, aber dann gibt es keine gespeicherte Datei, wo es sein sollte ....
Dies ist der Code, den ich zum Speichern der Datei verwende:
%Vor% Zunächst ist der error
Selektor veraltet. Verwenden Sie stattdessen if (error)
. Zweitens, die Art, wie error
Ihnen sagt, was Sie falsch machen, ist das Argument po error
.
Sie sollten insbesondere auch Fehler für Datei-E / A behandeln, denn auch wenn Ihr Code zu 100% korrekt ist, können auf dem System des Benutzers Fehler auftreten (unzureichende Berechtigungen usw.) und der Fehler dem Benutzer präsentiert werden erlauben Sie ihnen zu sehen, dass es fehlgeschlagen ist (und haben Sie eine Idee warum). Wenn Sie den Fehler im Code behandeln, kann Ihre App wiederhergestellt werden. Wenn Sie beispielsweise versucht haben, die Datei unterhalb des eingefügten Codes (nach dem Schreiben auf die Festplatte) zu lesen, der Benutzer jedoch versucht hat, sie in eine Netzwerkfreigabe zu schreiben, auf die sie keinen Zugriff hatte, stürzt Ihre App möglicherweise ab. Wenn Sie wissen, dass der Schreibvorgang fehlgeschlagen ist, können Sie entsprechend vorgehen (möglicherweise nach einem anderen Speicherort fragen).
In diesem Fall glaube ich jedoch, dass die folgende Zeile Ihr Problem ist:
%Vor%Wenn Ihre App Sandboxed ist, muss der Benutzer Ihnen die Berechtigung für entweder eine spezifische Datei oder ein spezifisches Verzeichnis über die Öffnen / Speichern-Bereiche geben Sandkasten. Was Sie tun, ist die Datei, die der Benutzer Ihnen gegeben hat, zu schreiben und zu sagen: "Das ist großartig, aber ich möchte eine andere Datei speichern", was gegen die Sandbox verstößt. Was Sie stattdessen tun sollten, ist die Erweiterung im Speichern-Panel. Die vollständige feste Lösung wäre:
%Vor%Wenn in Zukunft etwas anderes nicht stimmt, können Sie den Wert von %code% zur Laufzeit überprüfen. Legen Sie beim Debuggen einen Haltepunkt in der %code% -Anweisung fest, um den Wert des %code% -Objekts zu prüfen (machen Sie einen %code% im Xcode-Debugger). Das sollte dir helfen, herauszufinden, was falsch ist.
Tags und Links objective-c cocoa nssavepanel appstore-sandbox