Speichern Sie Struct in UserDefaults

10

Ich habe eine Struktur, die ich in UserDefaults speichern möchte. Hier ist meine Struktur

%Vor%

In einem anderen ViewController habe ich eine UIButton, die an diese Struktur hängt wie

%Vor%

Ich möchte, dass, wenn der Benutzer auch auf diese Schaltfläche klickt, die Struktur in UserDefaults gespeichert wird, so dass, wenn der Benutzer die App beendet und sie dann wieder öffnet, wird sie gespeichert. Wie würde ich das tun?

    
Jacob Cavin 03.07.2017, 00:43
quelle

4 Antworten

4

Wenn die Struktur nur property list konforme Eigenschaften enthält, empfehle ich, eine Eigenschaft propertyListRepresentation und eine entsprechende init Methode

hinzuzufügen %Vor%

Um ein Array von Songs in UserDefaults write

zu speichern %Vor%

Um das Array zu lesen

%Vor%

Wenn title und artist niemals mutiert werden, sollten Sie die Eigenschaften als Konstanten deklarieren ( let ).

Diese Antwort wurde geschrieben, als Swift 4 im Beta-Status war. Unterdessen ist die Übereinstimmung mit Codable die bessere Lösung.

    
vadian 03.07.2017, 06:52
quelle
77

In Swift 4 ist das ziemlich trivial. Machen Sie Ihre Struktur codierbar, indem Sie sie einfach als das Codable-Protokoll anerkennen:

%Vor%

Beginnen wir nun mit einigen Daten:

%Vor%

So erhalten Sie das in UserDefaults:

%Vor%

Und wie geht es später wieder raus?

%Vor%     
matt 27.08.2017 20:30
quelle
1

Wenn Sie nur versuchen, dieses Array von Songs in UserDefaults zu speichern und nichts Besonderes zu verwenden: -

%Vor%

Wenn Sie ein schweres Array speichern, empfehle ich Ihnen, das NSCoding-Protokoll oder das Codable Protocol in swift 4

zu verwenden

Beispiel für das Codierungsprotokoll: -

%Vor%     
Dark Innocence 03.07.2017 06:41
quelle
0

Von hier:

  

Ein Standardobjekt muss eine Eigenschaftsliste sein, dh eine Instanz von (oder für Sammlungen, eine Kombination von Instanzen von):   NSDaten   ,   NSString   ,   NSNummer   ,   NSDatum   ,   NSArray   , oder   NSDictionary   . Wenn Sie einen anderen Objekttyp speichern möchten, sollten Sie ihn normalerweise archivieren, um eine Instanz von NSData zu erstellen.

Sie müssen NSKeydArchiver verwenden. Dokumentation finden Sie hier und Beispiele hier und hier .

    
Valdmer 03.07.2017 01:04
quelle

Tags und Links