2017-08-21 5 views
0

Ich möchte einige Werte in UserDefaults speichern. Und ich bin mit diesem CodeUserDefault Werte fehlen

func SaveSettings(){ 
    let def = UserDefaults.standard 
    def.set("test", forKey: "Value1") 
    def.set(myString, forKey: "Value2") //value: test1 
    def.set(myInt, forKey: "Value3") //value: 25 
    def.set(myInt64, forKey: "Value4") //value: 103254 
    def.synchronize() //I've tried to remove this line 
} 

Nach sparen Speichern ich diesen Code verwenden, um zu steuern, wenn meine Werte in UserDefaults gespeichert sind oder nicht

for (key, value) in UserDefaults.standard.dictionaryRepresentation() { 
     print("\(key) = \(value) \n") 
} 

und sehen dieses Ergebnis

{ 
    Value1 = test 
    Value2 = test1 
    Value3 = 25 
    Value4 = 103254 
} 

Bis jetzt gibt es kein Problem. Aber nachdem ich die App und schauen Sie sich die Werte in UserDefaults Neustart sehe ich dieses Ergebnis

{ 
    Value1 = test 
    Value2 = 
} 

Wie Sie sehen Value3 ad Value4 fehlen. Jedoch bleibt Value2 und Value1 bleibt. aber Value2 's Wert fehlt

+0

'lassen def = UserDefaults.standart' nicht kompiliert, was bedeutet, dass dies nicht die echten Code sein kann. –

+0

Entschuldigung. Es wäre "Standard" –

+0

Haben Sie '.removeObject (forKey:)' irgendwo in Ihrem Code aufgerufen? – nayem

Antwort

0

Ich habe das Problem gefunden.

SaveSettings() func haben, wenn myInt und myInt64 genannt s-Wert ist 's Werte nil und myString sind' leer. Irgendwie werden Value3 und Value4 hier gelöscht. Ich nehme an, dass dies passiert, weil ihr Wert nil ist. Aber ich bin mir nicht sicher, dass das der genaue Grund ist.

+0

Ja. Das war der Grund. Durch Setzen eines Wertes für einen beliebigen Schlüssel in 'UserDefaults' werden die entsprechenden Daten entfernt. Und in 'UserDefaults' jeden' ​​Optional' Typ Speicherung ist eine schlechte Praxis zu. Packen Sie Ihre 'Optional' bevor sie' UserDefaults' speichern. – nayem

0

Wenn Sie Ihre Anwendung ausführen, String-Wert, der u in der Value1 gesetzt haben, werden erhalten gespeichert, aber die String-Objekte sind keine Werte erhalten, wenn die App zunächst läuft. Sie müssen also überprüfen myInt, myString, myInt64 werden nicht vor dem Speichern in UserDefaults.standard Null.

Verwandte Themen