Frage

Ich entwickle eine App, die derzeit Sandboxed ist. Es fungiert als grundlegender Texteditor. Vor kurzem wollte ich testen, was passiert, wenn ich gleichzeitig eine Datei in meiner App und eine andere App öffne, ein Update in einer App durchführen und dann die aktualisierte in der anderen aktualisiert haben. Ich benutze Coda oder BBEdit als meine alternativen Herausgeber. Wenn ich Sandboxen ausschalte - dann gibt es dieses Problem nicht. Da Apps jedoch ab dem 1. März sandboxiert werden müssen, würde ich lieber eine Lösung implementieren, als zu warten.

Wenn ich beide Dateien öffne und in meiner App bearbeitet und dann zu der anderen App wechselt, werden die Änderungen reflektiert, damit diese Redakteure die Version gerade aus meiner App gespeichert haben. Wenn ich jedoch das Gegenteil des Speicherns aus ihrer App durchführe und dann zu meinem wechsle - keine Freude. Ohne eine Aktion meldet die Konsole zwei spezifische Fehler: deny file-issue-extension und deny file-write-data. Die App scheint Berechtigungen zu verlieren, um das Dokument zu bearbeiten, da es von einem externen Editor geändert wurde, nachdem das Dokument in meiner App geöffnet wurde. Wenn ich versuche, die Datei in meiner App zu speichern, werden das Dokument dupliziert, da es den Zugriff auf das Originaldokument verloren hat. Dies geschieht nicht umgekehrt, da diese Apps nicht sandkäfig sind und daher Berechtigungen haben, die meine App nicht tut. Es scheint auch nicht, dass Sie verhindern können, dass die andere App die Änderungen vornimmt, wenn Sie dieses Verhalten nicht wünschen.

In der Dokumentation auf Entwickler.apple.com wird nichts von dieser Art von Situation erwähnt. Ich bin mir nicht sicher, ob dies das beabsichtigte Verhalten ist. Wenn dies der Fall ist, kann ich meinem Benutzer nur mitteilen, dass die Dokumentberechtigungen verloren gegangen sind und sie entweder eine neue Version speichern oder die Datei wieder eröffnen sollten. Wenn es sich nicht um Verhalten handelt, welche Methode in der NSDocument -API würde dann der Datei die Erlaubnis erteilen, sobald sie verloren gegangen ist? Ich gehe davon aus, dass die Antwort die erstere ist, dass dies beabsichtigt ist, aber kann jemand bestätigen und gibt es Dokumentationen?

War es hilfreich?

Lösung

Ohne eine Aktion auszuführen, meldet die Konsole zwei spezifische Fehler: Verweigern Sie die Dateiversuche und verweigern Sie die Dateischreiberdaten. Die App scheint Berechtigungen zu verlieren, um das Dokument zu bearbeiten, da es von einem externen Editor geändert wurde, nachdem das Dokument in meiner App geöffnet wurde. Wenn ich versuche, die Datei in meiner App zu speichern, werden das Dokument dupliziert, da es den Zugriff auf das Originaldokument verloren hat

Das korrekte Verhalten in einer solchen Situation besteht darin, die Datei nicht zu überschreiben, sondern den Benutzer aufzufordern, wenn er das Dokument neu laden möchte, wenn ja, sie neu laden und dann schreiben.

Das Betriebssystem macht das Richtige, indem er nicht zulässt, dass ein Blind über eine Datei, die geändert wurde, nicht ermöglicht.

Siehe NSFilePresenter - (void) präsentedItemDidChange, um festzustellen, ob es sich geändert hat. Lesen Sie die Datei erneut und prüfen Sie dann, ob Sie sie speichern können. Sie sagen nicht, dass Ihnen eine Lektüre in der Datei abgelehnt wurde.

Da Sie keinen Code gepostet haben, ist es möglicherweise hilfreich, anzuzeigen, welchen Code Sie verwenden, um auf die Datei zuzugreifen und ihn zu speichern. Das NSDocument hat in der Handhabung für einige Arten von Dateiänderungen in der Sandbox eingebaut.

Andere Tipps

Rufen wir Ihre App Scottedit und Ihren Konkurrenten als Stackedit an

Es könnte mehrere Dinge geben. NSDocument hat eine Lockdocument -Methode. Stackedit hat das Dokument möglicherweise gesperrt und es nach dem Speichern nicht freigeschaltet. Wenn Sie die App beenden, sollte die Datei entsperrt und für Ihre App verfügbar sein. Wenn dies der Fall ist, müssen Sie eine Benachrichtigung erstellen, wenn sich die Dateiattribute mithilfe von KQUEUE oder einem anderen ändern.

Wenn die andere App den Zugriff auf Ihre App "blockiert". Sie können eine E -Mail an diesen Entwickler senden und ihn bitten, seine App zu aktualisieren, damit das Dokument nach dem Speichern entsperren wird. Dieser letzte Schritt ist zusätzlich zum Einrichten von Benachrichtigungen, da ein anderer Entwickler möglicherweise das Gleiche tut (wenn Sie Ihre App brechen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top