2017-05-15 4 views
5

Soweit ich weiß, kann die Klasse UIDocument nicht gespeicherte Änderungen an einer Datei verfolgen und die Datei sogar sperren, sodass sie nicht von mehr als einer Person ausgecheckt werden kann. Was passiert aber, wenn der Benutzer die App ohne Speichern beendet oder die App abstürzt? Wie würde ich die nicht gespeicherten Änderungen an einer UIDocument wiederherstellen, so dass beim erneuten Starten der App die UIDocument mit den neuesten ungesicherten Änderungen wieder geöffnet wird? Muss ich vor jeder Änderung doppelte Kopien jeder Datei erstellen und das temporäre Duplikat ändern, bis der Benutzer die Änderungen speichert? Oder bietet Apple eine einfachere Implementierung? Ich habe auch in Erwägung gezogen, den Inhalt der Datei und die undoManager jeder Instanz UIDocument regelmäßig als Cache zu speichern und zu speichern. Funktioniert das?UIDocument Wiederherstellen nicht gespeicherter Änderungen beim App Crash/Force Quit

Antwort

1

Die UIDocument und UIManagedDocument tun Automagic Änderungsverfolgung (Aufruf einer Funktion, wo Sie true zurück, wenn das Dokument geändert hat) und das Speichern der Änderungen auf die Festplatte durch respektieren Sie die anderen Systemeinschränkungen (zB wenn ein anderer Prozess das lesen versucht, Datei). Die Art, wie Apple speichert, ist sehr sicher, wenn Sie die Basisklassenmethoden nicht überschreiben. Wenn der Speichervorgang ausgelöst wird, speichert Apple in einer temporären Datei und wenn das Speichern erfolgreich ist, ist ein schnelles Umbenennen und Löschen der ursprünglichen Datei erfolgt (IIRC ist das Umbenennen/Löschen atomar oder fast atomar). Sie können davon ausgehen, dass die Sicherungsoperation keine beschädigte Datei im Dateisystem für 99,99% aller Fälle zurücklässt.

Apple-Trigger-Operationen im Hintergrund an bestimmten Punkten speichern (wie: Zeit basiert, wechselte App in den Hintergrund, vor dem anderen Prozess versucht, die Datei zu zugreift ...), aber ich konnte keine klare Aussage finden, was passiert, wenn die Anwendung beendet wird.

Das sagte, Logik und gesunden Menschenverstand sagt mir, dass, wenn Sie zwingen, eine Anwendung zu beenden, kann der aktuelle Dokumentstatus nicht gespeichert werden. Selbst das manuelle Implementieren einer "Schnellspeicherung" für einen Force-Quit ist technisch nicht möglich. Ein periodischer Hintergrundspeichervorgang (wie UIDocument bereits tut) ist möglicherweise die beste Strategie.

Informationen zum Speichern des Status des Undo-Managers: Dies ist das gleiche technische Problem wie beim Speichern des UIDocument. Es gibt kein Ereignis oder irgendetwas anderes, das der Anwendung mitteilt, dass es beendet werden soll.

Sie sollten die Apple Documentation lesen. Es ist sehr lang, aber es erklärt den Prozess detaillierter. Mein Rat an Sie wäre, die Strategie umzusetzen, die Apple auferlegt. Diese Strategien sind solide und funktionieren für viele, viele Anwendungen im Apple-Ökosystem und für ihre Benutzer. Darüber hinaus haben Sie reduzierte Implementierungskosten und automatische Verbesserungen (wenn Apple die Implementierung aktualisiert).

+0

Ihre Empfehlungen beiseite - Wie würde ich dem Benutzer ungesicherte Änderungen an einem Dokument ermöglichen, bis sie diese speichern, während auch nicht gespeicherte Änderungen wiederhergestellt werden, ähnlich wie Word, wenn der Computer herunterfährt? –

Verwandte Themen