Używam +[NSUserDefaults standardUserDefaults]
do przechowywania ustawień aplikacji. Składa się z około kilkunastu wartości ciągów. Czy można trwale usunąć te wartości zamiast po prostu ustawiając je na wartość domyślną?
ios
objective-c
cocoa-touch
nsuserdefaults
TonyNeallon
źródło
źródło
Odpowiedzi:
Możesz usunąć trwałą domenę aplikacji w następujący sposób:
W Swift 3 i nowszych:
Jest to podobne do odpowiedzi @samvermette, ale jest trochę czystsze IMO.
źródło
Ten kod resetuje wartości domyślne do domeny rejestracji:
Innymi słowy,
removeObjectForKey
dla każdego klucza zarejestrowanego w tej aplikacji.Podziękowania dla Kena Thomasesa w tym wątku na forach programistów Apple .
źródło
[NSUserDefaults resetStandardUserDefaults]
tego nie zrobię, to przede mną.Próbowałeś użyć -
removeObjectForKey
?źródło
Oto odpowiedź w Swift:
źródło
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
one-linerif let domainName = NSBundle.mainBundle().bundleIdentifier { NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName) }
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
Jeśli potrzebujesz go podczas programowania, możesz również zresetować symulator, usuwając wszystkie
NSUserDefaults
.Symulator iOS -> Resetuj zawartość i ustawienia ...
Pamiętaj, że spowoduje to również usunięcie wszystkich aplikacji i plików z symulatora.
źródło
źródło
W Swift:
źródło
Uwaga: Ta odpowiedź została również zaktualizowana dla Swift.
Co powiesz na to, aby mieć go w jednej linii?
Rozszerzenie odpowiedzi na @Christopher Rogers - zaakceptowana.
i tak, czasami może być to
synchronize
konieczne,Stworzyłem metodę, aby to zrobić,
Szybki ?
Dzięki swift jest jeszcze łatwiejszy.
I użycie :
źródło
Uwielbiam rozszerzenia, gdy czynią kod czystszym:
Szybki 5
źródło
Znalazłem to:
Źródło: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
źródło
Wszystkie powyższe odpowiedzi są bardzo trafne, ale jeśli ktoś nadal nie może zresetować domyślnych ustawień użytkownika dla usuniętej aplikacji, możesz zresetować ustawienia zawartości swojego symulatora, i to zadziała.
źródło
Jest to błąd lub cokolwiek innego, ale
removePersistentDomainForName
nie działa podczas usuwania wszystkichNSUserDefaults
wartości.Lepszą opcją jest zresetowanie
PersistentDomain
i można to zrobić w następujący sposób:źródło
Rozwijając odpowiedź @ folse ... Wierzę, że poprawniejsze wdrożenie byłoby ...
... wywołanie metody persistentDomainForName: NSUserDefault. Zgodnie ze stanem dokumentacji metoda „Zwraca słownik zawierający klucze i wartości w określonej trwałej domenie”. Wywołanie słownika Reprezentacja: zamiast tego zwróci słownik, który prawdopodobnie będzie zawierał inne ustawienia, ponieważ dotyczy szerszego zakresu.
Jeśli musisz odfiltrować dowolną z wartości, które mają zostać zresetowane, możesz to zrobić iteracyjnie po klawiszach. Oczywiście, jeśli chcesz po prostu zrezygnować z wszystkich prefiksów aplikacji, bez względu na to, jedna z pozostałych metod wymienionych powyżej jest najbardziej wydajna.
źródło
jeśli ustawienie aplikacji wymagające zresetowania to nsuserdefault w celu uzyskania dostępu do mikrofonu (moja sprawa), prostym rozwiązaniem jest odpowiedź Anthony'ego McCormicka ( Iphone - Jak włączyć dostęp aplikacji do multimediów na urządzeniu? - ALAssetsLibraryErrorDomain Code = -3312 „Global odmowa dostępu” ).
na urządzeniu wybierz Ustawienia> Ogólne> Resetuj> Resetuj ostrzeżenia o lokalizacji
źródło
Spróbuj tego, działa dla mnie.
Pojedyncza linia kodu
źródło