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:
UserDefaults.standard.set(["a", "b", "c"], forKey: "MyDefaults")
print("Test A: My saved defaults \(UserDefaults.standard.object(forKey: "MyDefaults"))")
UserDefaults.standard.set(nil, forKey: "MyDefaults")
print("Test B: My defaults set to nil \(UserDefaults.standard.object(forKey: "MyDefaults"))")
UserDefaults.standard.removeObject(forKey: "MyDefaults")
print("Test C: My defaults removed \(UserDefaults.standard.object(forKey: "MyDefaults"))")
Ja, beide Codezeilen sind äquivalent. Beide führen zu einem Null-Lesevorgang
id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];
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
.
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] copy];
for(NSString *key in keys) {
NSLog(@"Key Name: %@", key);
}
[keys release];
oder geben Sie einfach das Schlüssel- / Wertwörterbuch von aus NSUserDefaults standardUserDefaults
NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
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:
import Foundation
let key = "Test"
let value = "test"
let defaults = UserDefaults.standard
func printUD() {
print("UserDefaults after modification:\n")
defaults.dictionaryRepresentation().forEach { print("\($0): \($1)\n") }
print("-------------\n\n")
}
defaults.set(value, forKey: key); printUD()
defaults.set(nil, forKey: key); printUD()
defaults.set(value, forKey: key); printUD()
defaults.removeObject(forKey: key); printUD()
Vor iOS 11 dies führt in der Serialisierung nil
in Data
und wirft einen Fehler.