Sind die folgenden zwei Zeilen gleichwertig?
1.
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"example key"]
2.
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"example key"]
nsuserdefaults
ma11hew28
quelle
quelle
Antworten:
Swift 3.0
Die folgende Antwort ist nicht mehr der Fall, als ich dies getestet habe. Wenn
nil
das Ergebnis festgelegt ist, werden NSCFData gespeichert. Möglicherweise eine NSNull-Objektreferenz, aber ich bin nicht positiv.Um einen Wert für einen Schlüssel vollständig zu entfernen, verwenden Sie
UserDefaults.standard.removeObject(forKey: "YourDefault")
Ich habe mit folgendem Code getestet:
quelle
Ja, beide Codezeilen sind äquivalent. Beide führen zu einem Null-Lesevorgang
NSUserDefaults
gibt nil zurück, wenn der Schlüssel nicht gefunden wurde. Ich würde empfehlen, die zu verwendenremoveObjectForKey
anstatt es auf Null zu setzen.Hier erfahren Sie, wie Sie testen, ob durch Setzen des Schlüsselwerts auf Null der Schlüsseleintrag entfernt wurde
NSUserDefaults standardUserDefaults
.oder geben Sie einfach das Schlüssel- / Wertwörterbuch von aus
NSUserDefaults standardUserDefaults
quelle
removeObjectForKey
?setObject:nil
wird auch das Objekt entfernt, nicht nur sein Schlüssel. Beide Funktionen bewirken also genau das gleiche Ergebnis. Wenn Sie das einzige gespeicherte Objekt (und den Schlüssel) entfernen (oder auf Null setzen), wird die gesamte .plist-Datei gelöscht.Swift 5.0 + iOS 11 und höher
Beide Methoden entfernen den Wert. Versuchte dies auf einem Spielplatz:
Vor iOS 11 dies führt in der Serialisierung
nil
inData
und wirft einen Fehler.quelle