Wie lösche ich einen Benutzerstandardwert in NSUserDefaults?

79

Das heißt, meine App legt zu Beginn einige Standardwerte fest. Dann können diese Werte vom Benutzer überschrieben werden. Und wenn der Benutzer etwas durcheinander bringt, möchte ich diese Einstellungen auf die Standardwerte meiner App zurücksetzen. Soweit ich weiß, sind die App-Standardeinstellungen ein anderes Wörterbuch als die Benutzerstandards, und die Benutzerstandards überschreiben nur diese App-Standardeinstellungen. Ich habe jedoch keine Methoden zum Löschen der Benutzerstandards gesehen. Irgendeine Idee?


quelle

Antworten:

140

Versuchen Sie es removeObjectForKey- das sollte Ihnen die Möglichkeit geben, eine Präferenz zu entfernen.

fbrereto
quelle
97

Verwenden Sie diesen Code

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"MyKey"];

Vergessen Sie nicht zu synchronisieren, wenn Sie sofort speichern möchten

[[NSUserDefaults standardUserDefaults] synchronize];

NSUserDefaults-Klassenreferenz

synchronisieren - Diese Methode wird in regelmäßigen Abständen automatisch aufgerufen. Verwenden Sie diese Methode nur, wenn Sie nicht auf die automatische Synchronisierung warten können (z. B. wenn Ihre Anwendung gerade beendet wird) oder wenn Sie die Benutzerstandards auf den Stand der Festplatte aktualisieren möchten Sie haben jedoch keine Änderungen vorgenommen.

Swift 5:

UserDefaults.standard.removeObject(forKey: "MyKey")
UserDefaults.standard.synchronize()
Rajneesh071
quelle
2
+1 für [[NSUserDefaults standardUserDefaults] synchronize]; Normalerweise vergesse ich, dies hinzuzufügen.
Augustine
Wenn Sie nicht synchronisieren, wird es automatisch synchronisiert, wenn Sie Ihre App schließen.
Yucel Bayram
1
@yucelbayram -> yup, aber wenn du sofort speichern willst, musst du synchronisieren.
Rajneesh071
1
@ Rajneesh071 ja das stimmt.
Yucel Bayram
In der Apple-Dokumentation heißt es derzeit zur Synchronisierungsmethode: "Wartet auf ausstehende asynchrone Aktualisierungen der Standarddatenbank und kehrt zurück. Diese Methode ist nicht erforderlich und sollte nicht verwendet werden." Sie müssen dies nicht mehr verwenden.
anders32
8
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];
Mohit
quelle
8

Schnelle Version zum einfachen Einfügen von Kopien:

var idForUserDefaults = "somestupidtext"
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.removeObjectForKey(idForUserDefaults)
userDefaults.synchronize()

oder

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()
Esqarrouth
quelle
In den Apple-Dokumenten heißt es: .synchronize() "Ist unnötig und sollte nicht verwendet werden. Developer.apple.com/documentation/foundation/userdefaults/…
James Jordan Taylor
6

So entfernen Sie einen bestimmten KEY-Wert:

Swift 3+

UserDefaults.standard.removeObject(forKey: "KEY")

Obj-C

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];

Wenn Sie UserDefaults zurücksetzen / Alle Daten löschen müssen :

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

Swift 3:

if let bundle = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundle)
}
Lal Krishna
quelle
4

Aktualisiert für Swift 3.0-Code:

UserDefaults.standard.removeObject(forKey: "YOURKEY")

kbunarjo
quelle
2
Value of type 'UserDefaults' has no member 'remove'
Charlie Fish
1
kbunarjo, hast du das überhaupt versucht? LOL. Swift 3 -UserDefaults.standard.removeObject (forKey: "Key")
Jeff
1
@ Jeff sie haben erst kürzlich eine neuere Version von Swift 3 (3.1) veröffentlicht. Ich habe mir die Dokumente noch nicht angesehen, daher gehe ich davon aus, dass meine Version aus diesem Grund nicht mehr funktioniert.
Kbunarjo
Ja, fand es lustig :)
Jeff
1
UserDefaults.standard.removeObject (forKey: "YOURKEY");
Martyn Chamberlin
0

In Swift 4

    UserDefaults.standard.removeObject(forKey: "your_key")
    UserDefaults.standard.synchronize()
Chatar Veer Suthar
quelle
-1

Schneller Weg

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
Basir Alam
quelle