Jak usunąć domyślną wartość użytkownika w NSUserDefaults?

79

To znaczy, moja aplikacja ustawia na początku kilka standardowych wartości domyślnych. Następnie te wartości mogą zostać nadpisane przez użytkownika. A kiedy użytkownik coś zepsuje, chcę przywrócić te ustawienia do domyślnych wartości mojej aplikacji. Jak rozumiem, ustawienia domyślne aplikacji to inny słownik niż domyślne użytkownika, a ustawienia domyślne użytkownika po prostu zastępują te wartości domyślne aplikacji. Ale nie widziałem metod usuwania ustawień domyślnych użytkownika. Dowolny pomysł?


źródło

Odpowiedzi:

97

Użyj tego kodu

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

nie zapomnij o synchronizacji, jeśli chcesz natychmiast zapisać

[[NSUserDefaults standardUserDefaults] synchronize];

Odwołanie do klasy NSUserDefaults

synchronizuj - ta metoda jest automatycznie wywoływana w okresowych odstępach czasu, użyj tej metody tylko wtedy, gdy nie możesz czekać na automatyczną synchronizację (na przykład, jeśli Twoja aplikacja ma się zamknąć) lub jeśli chcesz zaktualizować domyślne ustawienia użytkownika na to, co jest na dysku, nawet chociaż nie wprowadziłeś żadnych zmian.

Swift 5:

UserDefaults.standard.removeObject(forKey: "MyKey")
UserDefaults.standard.synchronize()
Rajneesh071
źródło
2
+1 dla [[NSUserDefaults standardUserDefaults] synchronizacji]; Zwykle zapominam o tym dodać.
Augustine,
jeśli nie zsynchronizujesz, zsynchronizuje ją automatycznie po zamknięciu aplikacji.
Yucel Bayram
1
@yucelbayram -> tak, ale jeśli chcesz natychmiast zapisać, musisz zsynchronizować.
Rajneesh071
1
@ Rajneesh071 tak, to prawda.
Yucel Bayram
Dokumentacja Apple mówi obecnie o metodzie synchronizacji: „Oczekuje na wszelkie oczekujące aktualizacje asynchroniczne do domyślnej bazy danych i zwraca; ta metoda jest niepotrzebna i nie powinna być używana”. Nie musisz już tego używać.
anders, 32
8
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];
Mohit
źródło
8

Szybka wersja do łatwego wklejania kopii:

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

lub

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()
Esqarrouth
źródło
Dokumenty Apple stwierdzają, że .synchronize() „jest niepotrzebne i nie powinno być używane. Developer.apple.com/documentation/foundation/userdefaults/…
James Jordan Taylor
6

Aby usunąć określoną wartość KEY:

Swift 3+

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

Obj-C

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

Jeśli chcesz zresetować ustawienia UserDefaults / wyczyścić wszystkie dane :

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

Swift 3:

if let bundle = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundle)
}
Lal Krishna
źródło
4

Zaktualizowano dla kodu Swift 3.0:

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

kbunarjo
źródło
2
Value of type 'UserDefaults' has no member 'remove'
Charlie Fish
1
kbunarjo, Czy nawet próbowałeś tego. LOL. Swift 3 -UserDefaults.standard.removeObject (forKey: "Key")
Jeff
1
@Jeff niedawno wydali nowszą wersję Swift 3 (3.1). Nie spojrzałem jeszcze na dokumentację, więc zakładam, że dlatego moja wersja już nie działa.
kbunarjo
Tak, myślałem, że to było zabawne :)
Jeff
1
UserDefaults.standard.removeObject (forKey: "TWÓJ KLUCZ");
Martyn Chamberlin
0

W Swift 4

    UserDefaults.standard.removeObject(forKey: "your_key")
    UserDefaults.standard.synchronize()
Chatar Veer Suthar
źródło
-1

Szybki sposób

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
Basir Alam
źródło