Antworten:
Swift 3.0
Die folgende Antwort ist nicht mehr der Fall, als ich dies getestet habe. Wenn nildas 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"];
NSUserDefaultsgibt 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:nilwird 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 nilin Dataund wirft einen Fehler.