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?

Antworten:



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()

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 ];

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()

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)
}

4

Aktualisiert für Swift 3.0-Code:

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


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()

-1

Schneller Weg

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.