Erstellen Sie eine Beispiel-iPhone-App, die die Sitzungsdaten eines Benutzers mit NSUserDefaults speichert

Einführung: Erstellen Sie eine großartige Benutzererfahrung

Wenn Ihre App irgendeine Art von Workflow oder Dateneingabe erfordert, empfiehlt es sich, den App-Status beim Herunterfahren regelmäßig zu speichern. Andernfalls können Benutzer ihre gesamte Arbeit verlieren. Dies wäre nicht nur ein Datenverlust, sondern auch ein Zeitverlust.

Eines Ihrer Hauptziele ist es, eine großartige Benutzererfahrung zu schaffen. In Bezug auf das Speichern von Daten und den App-Status, NSUserDetaults kann Ihnen dabei helfen, dies zu erreichen. Es erfordert nicht zu viel Arbeit, aber die Belohnungen für den Benutzer können enorm sein.

Was ist NSUserDefaults

NSUserDefaults ist eine Singleton-Klasse, mit der Sie Daten speichern können, ohne dass der Benutzer es überhaupt weiß. Es bietet dem Benutzer ein nahtloses Erlebnis. Sie wählen aus, in welchen Daten gespeichert werden soll NSUserDefaults, synchronisieren und fertig. Sofortiger App-Status gespeichert!

Wenn Sie die vollständige Apple-Entwicklerdokumentation lesen möchten, können Sie sie finden hier.

Die App

Um zu demonstrieren, wie NSUserDefaults funktioniert, werden wir eine App bauen. Wir konzentrieren uns auf NSUserDefaults und nicht so sehr darauf, eine ausgefeilte Benutzeroberfläche zu erstellen.

Die App, die wir erstellen werden, ist eine Single-View-App mit zwei Eingabefeldern und zwei Schaltflächen. Der Benutzer gibt seine Daten in zwei Felder ein und klickt auf eine Schaltfläche zum Speichern. Wenn Sie auf die Schaltfläche klicken, speichern wir auch ihre Daten im Hintergrund.

Wir werden auch eine Clear-Schaltfläche haben, um Daten aus den Eingabefeldern zu entfernen. Diese Löschtaste hat einen doppelten Zweck. Sobald Daten aus den Eingabefeldern gelöscht wurden, ändert sich der Schaltflächentext von Löschen zu Laden. Wenn Sie in diesem Zustand auf die Schaltfläche klicken, werden die Daten in unsere Eingabefelder geladen, die zuvor gespeichert wurden NSUserDefaults.

Wenn der Benutzer die App erneut öffnet und auf die Ladeschaltfläche klickt, holen wir uns seine Daten aus NSUserDefaults und beliebt die Textfelder.

Unten ist ein Screenshot der endgültigen App:

Die App

Erstellen des Projekts

Um das Projekt zu erstellen, starten Sie Xcode und wählen Sie Single View Application für Ihren Projekttyp aus. Sobald das Projekt geöffnet ist, klicken Sie auf Main.storyboard. Klicken Sie oben in der Szene auf das Ansichts-Controller-Symbol, wie unten gezeigt:

Controller-Symbol anzeigen

Wir ändern die Größe der Szene auf ein iPhone 6. Rufen Sie den Attributes Inspector auf und wählen Sie im Dropdown-Menü Größe die Option iPhone 4,7 Zoll aus.

Größe der Szene ändern

Erstellen der Benutzeroberfläche

Jetzt können wir mit der Arbeit an der Benutzeroberfläche beginnen. Beginnen Sie mit dem Hinzufügen von zwei Beschriftungen auf der linken Seite des Bildschirms, bündig mit den linken Rändern. Doppelklicken Sie auf jedes Etikett, um mit der Eingabe zu beginnen. Geben Sie jeweils Folgendes ein:

First Name

Last Name

Ziehen Sie nun zwei Textfelder direkt unter jedes Etikett auf den Bildschirm. Richten Sie sie ebenfalls am linken Rand aus. Ziehen Sie die Breite der einzelnen Textfelder an den rechten Rand, sodass sie sich über den gesamten Bildschirm erstrecken.

Ziehen Sie eine Schaltfläche auf den Bildschirm und unter die Eingabefelder. Ändern Sie den Text in „Speichern“. Ziehen Sie die Breite an jeden Rand, sodass sie sich über den gesamten Bildschirm erstreckt.

Klicken Sie auf den Attributes Inspector für die Schaltfläche und ändern Sie den Hintergrund in Hellgrau. Klicken Sie auf den Größeninspektor und ändern Sie die Höhe auf 70.

Machen Sie dasselbe für die Schaltfläche Löschen.

Binden des Modells an unsere Benutzeroberfläche

Jetzt können wir damit beginnen, unser Modell zu binden (ViewController Klasse) an die Benutzeroberfläche. Das bedeutet, dass wir Daten erfassen können, die der Benutzer in unsere Eingabefelder eingibt. Dies erfolgt, indem erkannt wird, dass der Benutzer auf die Schaltfläche „Speichern“ geklickt hat, die ebenfalls an die Benutzeroberfläche gebunden ist.

Hier sind die Schritte, um die Bindung abzuschließen: Klicken Sie im linken Bereich auf Main.storyboard. Dies öffnet unsere Haupt- und einzige Szene.

Klicken Sie auf Hauptstoryboard

Wir möchten den Assistant Editor anzeigen und die Dienstprogramme ausblenden. Klicken Sie oben rechts in Xcode auf die beiden miteinander verbundenen Kreise direkt über dem linken roten Pfeil im Screenshot. Dadurch wird der Assistant Editor angezeigt. Wir können auch den Bereich „Dienstprogramme“ ausblenden, um mehr Platz zu schaffen. Klicken Sie dazu auf das Symbol direkt über dem rechten roten Pfeil im Screenshot.

Um einen UI-Verweis auf unsere Eingabefelder zu erstellen, klicken Sie auf den Vornamen TextField. Klicken Sie auf die Strg-Taste und ziehen Sie sie in den Assistant Editor direkt darüber viewDidLoad(). Dadurch wird ein Fenster geöffnet, um ein IBOutlet zu erstellen. Geben Sie den Namen ein Vorname.

Erstellen Sie ein IBOutlet

Machen Sie dasselbe für den Nachnamen TextField und geben Sie ihm den Namen Nachname. Wir können auch eine Referenz erstellen, um den Klick auf die Schaltfläche „Speichern“ zu erfassen. Steuern Sie das Ziehen von der Schaltfläche „Speichern“ zum Assistenten-Editor direkt darunter viewDidLoad() diesmal.

Sie erhalten das gleiche Popup-Fenster. Wir werden eine Aktion erstellen, die eine Funktion anstelle einer Eigenschaft ist. Wir benötigen eine Funktion, da wir ein Ereignis von diesem UI-Element erfassen und nicht nur einen Verweis darauf benötigen (wie wir es mit TextFields für Vor- und Nachnamen getan haben).

Wählen Sie in der Dropdown-Liste Verbindung die Option Aktion aus. Geben Sie ihm den Namen saveButtonClick.

eine Aktion erstellen

Fügen Sie eine weitere Schaltfläche hinzu und geben Sie sie ein Klar auf der Taste. Fügen Sie nun eine Aktion für die Schaltfläche hinzu, genau wie Sie es für die Schaltfläche Speichern getan haben, und rufen Sie sie auf clearButtonClick. Wir werden auch ein IBOutlet für die Clear-Schaltfläche hinzufügen. Dadurch können wir den Schaltflächentext zur Laufzeit ändern. Steuern Sie das Ziehen von der Clear-Schaltfläche in den View-Controller (genauso wie Sie es für die TextFields getan haben) und erstellen Sie ein IBOutlet namens clearButton.

Dein ViewController Die Klassendatei sollte nun die folgenden zwei IBOutlets und zwei IBActions enthalten:

@IBOutlet var firstName: UITextField!
@IBOutlet var lastName: UITextField!
@IBOutlet var clearButton: UIButton!
    
override func viewDidLoad() {
  super.viewDidLoad()
  
}

@IBAction func saveButtonClick(sender: AnyObject) {
}

@IBAction func clearButtonClick(sender: AnyObject) {
}

Speichern unter NSUserDefaults

Wir werden jetzt unsere TextField-Daten speichern in NSUserDefaults sobald der Speichern-Button geklickt wird. Fügen Sie Folgendes zu Ihrer hinzu saveButtonClick Funktion:

@IBAction func saveButtonClick(sender: AnyObject) {
  let defaults = `NSUserDefaults`.standardUserDefaults()

  defaults.setObject(firstName.text, forKey: "firstName")
  defaults.setObject(lastName.text, forKey: "lastName")
  defaults.synchronize()

  println("fn=\(firstName.text), ln=\(lastName.text)")
}

Hier ist, was in diesem Code passiert. Wir beginnen damit, einen Verweis auf den Standardwert zu erhalten NSUserDefaults. Dies ist im Grunde ein Singleton, also egal wie oft wir diesen Code aufrufen, er wird immer gleich sein NSUserDefaults Beispiel.

Das NSUserDefaults Instanz wird dann einer Konstante mit dem Namen zugewiesen Voreinstellungen. Es ist am besten, wenn möglich Konstanten zu verwenden. Dadurch wird sichergestellt, dass später keine unerwarteten Änderungen an Ihrer Referenz vorgenommen werden.

Als nächstes haben wir zwei Anrufe an setObject(). Hier fügen wir alles hinzu, was wir speichern möchten NSUserDefaults. Der erste Parameter ist das Objekt, das wir speichern, und der zweite ist ein Schlüssel, der verwendet wird, um dieses Objekt später abzurufen.

Schließlich synchronisieren wir NSUserDefaults um eine unverzügliche Speicherung unserer Daten zu gewährleisten. Achten Sie darauf, wo Sie synchronisieren NSUserDefaults da es bei großen Datenmengen zu Verzögerungen kommen kann. Aber im Moment wird das kein Problem sein.

Die letzte Zeile dient zur Ausgabe von Werten, die von der Benutzeroberfläche erfasst wurden, in die Konsole. Wenn Sie das Programm ausführen und john do eingeben und dann auf die Schaltfläche Speichern klicken, wird die folgende Konsolenausgabe erzeugt:

Konsolenausgabe

Abrufen von Daten aus NSUserDefaults

Die Clear-Taste hat zwei Verhaltensweisen. Wenn sich Daten in den TextFields befinden, werden diese Daten gelöscht. Wenn in den TextFields keine Daten vorhanden sind, werden die TextFields mit Daten aus gefüllt NSUserDefaults.

Erstellen Sie Folgendes loadDefaults() Funktion direkt darunter clearButtonClick():

func loadDefaults() {
  let defaults = `NSUserDefaults`.standardUserDefaults()
  irstName.text = defaults.objectForKey("firstName") as String
  lastName.text = defaults.objectForKey("lastName") as String
}

Reden wir darüber, was in der los ist loadDefaults() Funktion. Als erstes erhalten wir einen Verweis auf die NSUserDefaults Beispiel. Als nächstes rufen wir an objectForKey() und übergeben Sie den Schlüsselwert, den wir in der verwendet haben buttonSaveClick() Funktion.

Das als Zeichenfolge Code ist hier notwendig. Wir weisen Zeichenfolgen (dh firstName.text) Werte zu, aber diese Werte sind ursprünglich Objekte. Die Saitenbesetzung sorgt für die richtige Zuordnung als Saite.

Wir können jetzt unsere füllen clearButtonClick() Funktion. Fügen Sie in dieser Funktion den folgenden Code hinzu:

@IBAction func clearButtonClick(sender: AnyObject) {
  if(firstName.text == ""){
    loadDefaults()
    clearButton.setTitle("Clear", forState: .Normal)
  }
  else {
    firstName.text = ""
    lastName.text = ""
    clearButton.setTitle("Load", forState: .Normal)
  }
}

Beachten Sie, wie wir den Schaltflächentext ändern, je nachdem, ob Daten im firstName TextField vorhanden sind oder nicht. Dieselbe Logik wird auch verwendet, um zu bestimmen, ob wir Daten laden müssen oder nicht.

Nehmen wir es für eine Spritztour

Führen Sie das Programm aus. Geben Sie etwas in jedes Feld ein und klicken Sie auf Speichern. Beachten Sie Ihre Konsolenausgabe. Ihre Daten sollten nun gespeichert werden NSUserDefaults.

Klicken Sie auf die Schaltfläche Löschen. Der Text der Schaltfläche „Löschen“ sollte sich in „Laden“ ändern. Klicken Sie nun auf die Schaltfläche Laden und beachten Sie, dass die TextFields von ausgefüllt werden NSUserDefaults mit unseren bisherigen Einträgen.

Hinweis zu Simulator und NSUserDefaults

Da jeder Lauf des Simulators von Xcode im Grunde eine neue App erstellt, bleiben unsere Daten nicht über mehrere Simulatorläufe hinweg bestehen. Um die Persistenz zu testen, müssen Sie die App auf Ihr iPhone laden. Verbinden Sie dazu einfach Ihr iPhone mit Ihrem Mac. Wählen Sie Ihr iPhone in Xcode aus und führen Sie die App aus.

Geben Sie nach dem Laden der App einige Daten ein und klicken Sie auf Speichern. Schließen Sie nun die App. Doppelklicken Sie dazu auf die Home-Schaltfläche und wischen Sie auf der App nach oben, um sie vom Bildschirm zu entfernen. Die App ist jetzt beendet. Tippen Sie auf das App-Symbol, um es zu öffnen. Klicken Sie auf die Schaltfläche Löschen. Beachten Sie, dass Ihre Daten zurückkommen.

Ich hoffe, Ihnen hat dieses Einführungstutorial zur Verwendung gefallen NSUserDefaults. Es ist ein einfaches Tutorial, aber es lässt Sie sehen, wie NSUserDefaults funktioniert. Die Konzepte, die Sie in diesem Lernprogramm erlernt haben, können sicherlich weiter verwendet werden.

NSUserDefaults ist eine großartige Lösung, wenn Sie nur Daten über App-Sitzungen hinweg beibehalten möchten und kein großes Datenframework oder keine relationale Datenbank benötigen, wie sie beispielsweise mit Core Data angeboten werden.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *