Frage

Ich habe eine iPhone-Anwendung mit Tab-Leiste und Navigation-Controller entwickelt.

Es funktioniert gut für jetzt.

Jetzt möchte ich die Anwendung ihren Zustand zu speichern, bevor beenden.

Angenommen, ich habe 6 Registerkarten und Wenn ein eingehender Anruf kommt, so dass nach der App Neubelebung ich die Registerkarte ausgewählt sehen soll, dass wurde schließlich ausgewählt.

Ich habe zu diesem Thema einige Fragen gesehen, aber ich bin mehr verwirrt, nachdem er sie,

kann mir jemand sagen, einen geraden Weg, dies zu tun?

War es hilfreich?

Lösung

Es gibt keine „one size fits all“, genaue Antwort auf diese Frage -. Die Umsetzung des Sparanwendungszustandes wird stark von der Struktur der Anwendung abhängig, so sehr, dass jede einzelne Lösung ist unwahrscheinlich Ihren speziellen Fall passen

Es gibt einige allgemeine Tipps und Hinweise jedoch, dass auf dem richtigen Weg legen Sie sollten einen guten Zustand zu bewahren Lösung zu entwickeln:

  1. Sie werden in der Regel alle Operationen ausführen möchten Zustand in applicationWillTerminate: in AppDelegate zu speichern oder für UIApplicationWillTerminateNotification in anderen Klassen zu hören.

  2. bei NSUserDefaults suchen. Sie NSUserDefaults Schlüssel speichern können / Wert-Paare in Bezug auf Vorlieben oder andere Informationen (ähnlich eine NSDictionary, obwohl Sie nur Speicherobjekte können, das NSCoding in NSUserDefaults implementieren). Verwenden NSUserDefaults Zustandsinformationen zu speichern. Ein Nachteil -. Sie sollten nicht NSUserDefaults verwenden für die Speicherung großer Datenmengen, da dies Ihrer Anwendung Startzeit verlangsamen (da die Werte beim Start geladen werden)

  3. Speziellere zu Ihrem Fall ... wenn alles, was Sie tun wollen, um die ausgewählten Registerkarte zwischen Anwendung zu erhalten, sollten Sie applicationWillTerminate: implementieren und verwenden NSUserDefaults den ausgewählten Registerkarte Index zu speichern. Dann in Ihrer applicationDidFinishLaunching: Implementierung, werden Sie überprüfen die Existenz dieser NSUserDefaults Taste und stellen Sie die ausgewählten Index der UITabBarController den gespeicherten Wert, wenn es vorhanden ist.

  4. Wenn Sie in die Lage sein wiederherstellen mögen, zum Beispiel der Navigationsstapel der auch ausgewählten Registerkarte, dann müssen Sie genügend Informationen zu speichern, so dass das Navigationsstapel genau rekonstruiert werden kann. Welche Informationen sollten Sie in NSUserDefaults speichern ist schwer, in einem allgemeinen Sinne zu quantifizieren, da sie sehr spezifisch auf die Struktur Ihrer Anwendung und die möglichen Iterationen der View-Controller-Hierarchie innerhalb des Navigationsstapels ist.

  5. Wenn Sie eine allgemeinere Navigationsstapel wiederherzustellen, einschließlich möglicherweise Benutzerdaten eingegeben, die Sie wollen nicht verloren gehen, wenn die Anwendung geschlossen ist (wie zum Beispiel, wenn der Benutzer einen neuen Rekord von einer Art ist die Schaffung ), würde ich vorschlagen, dass Sie Ihren Fokus verschiebt sich die Anwendung Zustand am AppDelegate Ebene von der Speicherung und konzentrieren sich stattdessen Ihre view-Controller-Klassen für UIApplicationWillTerminateNotification auf, die hören und tun ihre eigenen spezifischen Zustand Einsparung. Sie müssten auch per-View-Controller auf Beendigung gespeichert, dass Informationen über einen Mechanismus bestimmen, für die Verwendung der Navigationshierarchie wiederherzustellen. Dies ist eine komplexere Technik, die nicht notwendig sein kann, je nach Bedarf.

Leider ist diese Antwort ein wenig nebulös, vor allem für die allgemeineren und komplexen Fällen, weil, wie ich es keine allgemeine Lösung für diese Frage ist zu bemerken, da es so stark auf Ihre Anwendungsstruktur abhängt.

Hier ist ein Beispiel von NSUserDefaults mit: http://robertcarlsen.net/2009/06/19/overly-simplistic-saving-state-in-of-for-iphone-847

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