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
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).
- 1. Wiederherstellen oder Aktualisieren für nicht erzwungene Änderungen
- 2. App stürzt beim Wiederherstellen von Hintergrund ab
- 3. Async-Schleife beim App-Relaunch wiederherstellen
- 4. UIDocument openWithCompletionHandler Abschluss nicht auf iOS-Gerät
- 5. UIDocument in LotusNotes aktualisieren
- 6. System.Data.SqlClient.SqlException beim Aufruf gespeicherter Prozedur
- 7. Problem beim Erstellen gespeicherter Prozedur
- 8. Wiederherstellen von Änderungen an der Postgres-Funktion
- 9. Wiederherstellen Debug-Taste Cordova App
- 10. Wiederherstellen von Änderungen, während im freien HEAD
- 11. TFS2015 - Wie kann ich zurückgestellte Änderungen wiederherstellen
- 12. In-App-Käufe wiederherstellen
- 13. Wiederherstellen verlorener lokaler Änderungen in Git
- 14. Wiederherstellen von nicht gestarteten Änderungen in einer Datei in Git
- 15. System.ArgumentException beim Wiederherstellen von ActiveInspector.WordEditor.Application.Selection.Font
- 16. UIDocument & NSFileWrapper - große Dateien eine lange Zeit zu sparen, trotz inkrementellen Änderungen
- 17. Formular reagiert nicht beim Wiederherstellen der Datenbank
- 18. Entity Framework Problem beim Ausführen gespeicherter Prozeduren
- 19. App stürzt beim Wiederherstellen aus dem Hintergrund nach langer Zeit
- 20. Freigabe von Code zwischen NSDocument und UIDocument
- 21. Git: quit "Typisierung" Modus
- 22. Quit ein ERB lesen
- 23. Wie gelöschte Facebook App wiederherstellen?
- 24. Schließen "<app> quit unerwartet" Fenster von Terminal/Bash
- 25. Gespeicherter Ausnahmezustand
- 26. quit Hauptschleife in Python
- 27. Wiederherstellen von In-App-Kauftransaktionen
- 28. android wiederherstellen in App Kauf
- 29. jQuery $ Quit .each Schleife
- 30. Fehler beim Wiederherstellen der Datenbanksicherung
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? –