Wie zu verwenden NSUserDefaults mit AppDelegate
Ich versuche, mit NSUserdefaults zum speichern von Daten aus einem Textfeld, ich will es, um gerettet zu werden beim beenden der Anwendung gespeichert und geladen, wenn die Anwendung gestartet wird, jedoch habe ich in eine Wand laufen.
Den Methoden, die ich verwenden möchte sind alle in der AppDelegate, Jetzt kann ich nicht verstehen, wie AppDelegate sehr gut, ich dachte an zwei Möglichkeiten, um dies zu erreichen, ich habe keine Ahnung, ob es funktionieren würde, aber.
- Import AppDelegate und Fahrt über die Methoden in meinem VC
ODER - erstellen Sie eine Instanz des VC in AppDelegate und ermöglichen AppDelegate einstellen und abrufen der text meiner UITextField - (diese nicht gegen das MVC-Paradigma?)
Irgendwelche Vorschläge würden geschätzt
Danken Ihnen sehr für Ihre Zeit
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie bereits erwähnt haben Sie zwei Möglichkeiten:
1-) Direkt erreichen, VC
UITextField
ausAppDelegate
'sapplicationDidFinishLaunching
undapplicationWillTerminate
Methoden.Auf
applicationDidFinishLaunching
:Lesen von
NSUserDefaults
legenUITextField
im VC.Auf
applicationWillTerminate
:Lesen von
UITextField
im VC, setNSUserDefaults
undsynchronize
.2) Erstellen der richtigen Methoden in der VC zu tun, den gleichen job, und rufen Sie
AppDelegate
.Anstatt halten Sie das Textfeld in der AppDelegate, halten Sie den text. Ich würde Folgendes tun:
1) In AppDelegate.h:
2) In AppDelegate.m, Lesen und schreiben textToBeSaved zu NSUserDefaults, wenn die app startet und beendet. Am Start:
und, vor Kündigung:
3) In SomeViewController.m, der natürlich besitzt das UITextField, in viewWillAppear:
4) Wenn Sie die textToBeSaved, hängt von der Benutzeroberfläche, aber wenn Sie wissen der text fertig ist (sagen wir auf textFieldShouldReturn, oder shouldEndEditing), können Sie von hand die Zeichenfolge in AppDelegate:
Wenn es keine Benutzeroberfläche angezeigt, damit der Benutzer den text anzunehmen, speichern Sie die Zeichenfolge auf (textField:shouldChangeCharactersInRange:replacementString).
Ich würde dir empfehlen, einfach registrieren für einige UIApplication-Benachrichtigungen in Ihrer Unterklasse und reagieren Sie entsprechend. Hier ist der link zu der UIApplication-docs. Die Benachrichtigungen, die Sie abonnieren können, sind aufgelistet, am unteren Rand der Seite.
http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html
Hier ein Beispiel von dem, was Sie tun könnten, in Ihrer Unterklasse:
Vergessen Sie nicht, entfernen Sie sich selbst als Beobachter, als auch. Es gibt viele tutorials online, wenn Sie sich nicht wohl mit NSNotifications.
Es ist sicherlich erlaubt, um die App Delegieren, halten eine Referenz auf den view-controller-Kette. Apples eigene Beispiele und iOS-app-Vorlagen Häufig einen Zeiger auf einen root-view-controller eine App Delegate-Instanz-variable.
Wenn der view-controller-Kette ist nicht gebrochen, eine Möglichkeit ist die App Stellvertretung senden "cleanUpNow" Nachricht an den Anfang oder das root-view-controller und die view-Controller-pass, die unten in der Kette, mit jedem view-controller Reinigung Bedarf und dann erneut die Nachricht an alle anderen Controller weiter unten in der Kette zu reinigen als gut.
Erreichen direkt in ein anderes view-controller ist wahrscheinlich weniger sauber, dass senden eine Nachricht zu bereinigen Sie selbst (schreiben NSDefaults etc.). Vielleicht haben Sie alle Nachrichten-zentrale "reinigen" - controller-Objekt, dessen Zweck ist zu sammeln alle notwendigen staatlichen und schreiben Sie es in ein zusammenhängendes Stück.
Wenn die Kette kaputt ist, ist eine weitere option für die App Delegieren, um eine Benachrichtigung zu senden, mit ein Controller benötigt, um zu bereinigen die Registrierung der Handler für das "clean up" - Benachrichtigung.