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ł?

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

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

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

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

4

Zaktualizowano dla kodu Swift 3.0:

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


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


-1

Szybki sposób

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.