Clearing NSUserDefaults

stimmen
274

Ich verwende die +[NSUserDefaults standardUserDefaults]Anwendungseinstellungen zu speichern. Diese besteht aus etwa einem Dutzend String - Werten. Ist es möglich , diese Werte permanent statt sie nur auf einen Standardwert löschen Einstellung?

Veröffentlicht am 13/02/2009 um 08:49
quelle vom benutzer
In anderen Sprachen...                            


15 antworten

stimmen
495

Sie können den Antrag der persistenten Domäne wie folgt entfernen:

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

In Swift 3 und höher:

if let bundleID = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundleID)
}

Dies ist vergleichbar mit der Antwort von @samvermette aber ist ein wenig sauberer IMO.

Beantwortet am 26/07/2011 um 03:55
quelle vom benutzer

stimmen
101

Dieser Code setzt die standardmäßig auf die Registrierungsdomäne:

[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];

Mit anderen Worten, es removeObjectForKeyfür jede einzelne Taste , die Sie jemals in dieser Anwendung registriert.

Credits Ken Thomases auf diesem Apple Developer Foren - Thread.

Beantwortet am 10/06/2010 um 05:40
quelle vom benutzer

stimmen
95

Haben Sie versucht , mit - removeObjectForKey?

 [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
Beantwortet am 13/02/2009 um 08:51
quelle vom benutzer

stimmen
29

Hier ist die Antwort in Swift:

let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Beantwortet am 15/04/2015 um 14:36
quelle vom benutzer

stimmen
27

Wenn Sie es benötigen , während der Entwicklung, können Sie auch Ihren Simulator zurückgesetzt, alles zu löschen NSUserDefaults.

iOS Simulator -> Zurücksetzen Inhalt und Einstellungen ...

Denken Sie daran, dass es auch löschen Sie alle Anwendungen und Dateien auf Simulator.

Beantwortet am 06/09/2011 um 15:54
quelle vom benutzer

stimmen
13
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
                    [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
Beantwortet am 20/01/2014 um 04:56
quelle vom benutzer

stimmen
6

In Swift:

let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
Beantwortet am 18/08/2016 um 10:36
quelle vom benutzer

stimmen
5

Ich liebe Erweiterungen, wenn sie den Code sauberer zu machen:

extension NSUserDefaults {
    func clear() {
        guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
            return
        }

        self.removePersistentDomainForName(domainName)
    }
}
Beantwortet am 22/08/2016 um 22:33
quelle vom benutzer

stimmen
5

Hinweis: Diese Antwort wird auch für Swift aktualisiert.

Was ist, um es auf einer Linie?

Erweitern @Christopher Rogers Antwort - die akzeptierte ein.

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];

und ja, irgendwann können Sie benötigen synchronizees,

[[NSUserDefaults standardUserDefaults] synchronize];

Ich habe eine Methode, dies zu tun erstellt,

- (void) clearDefaults {
    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

Swift ?

Mit schnellen seinem noch einfacher.

extension UserDefaults {
    class func clean() {
        guard let aValidIdentifier = Bundle.main.bundleIdentifier else { return false }
        self.standard.removePersistentDomain(forName: aValidIdentifier)
        self.standard.synchronize()
    }
}

Und Nutzung :

UserDefaults.clean()
Beantwortet am 11/08/2015 um 06:02
quelle vom benutzer

stimmen
5

Ich habe das gefunden:

osascript -e 'tell application "iOS Simulator" to quit'
xcrun simctl list devices | grep -v '^[-=]' | cut -d "(" -f2 | cut -d ")" -f1 | xargs -I {} xcrun simctl erase "{}"

Quelle: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab

Beantwortet am 04/12/2014 um 18:33
quelle vom benutzer

stimmen
2

Es ist ein Fehler oder was auch immer , aber das removePersistentDomainForNamefunktioniert nicht , während alle Clearing - NSUserDefaultsWerte.

So ist eine bessere Option , dass die zurückgesetzt werden PersistentDomainund dass Sie über folgende Art und Weise tun können:

NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
Beantwortet am 09/03/2016 um 08:28
quelle vom benutzer

stimmen
1

Alle oben genannten Antworten sind sehr relevant, aber wenn jemand noch nicht die userdefaults für gelöschte App zurückgesetzt werden, dann können Sie die Inhaltseinstellungen von Ihnen Simulator zurückgesetzt, und es wird funktionieren.Geben Sie hier image description

Beantwortet am 16/10/2014 um 09:44
quelle vom benutzer

stimmen
1

In Erweiterung @ Folse Antwort ... ich glaube, eine korrekte Umsetzung wäre ...

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] persistentDomainForName: appDomain];
    for (NSString *key in [defaultsDictionary allKeys]) {
      NSLog(@"removing user pref for %@", key);
      [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
    }

... NSUserDefault der persistentDomainForName Aufruf: Methode. Als docs Zustand „Gibt einen Wörterbuch die Schlüssel und Werte in der angegebenen persistenten Domäne enthält.“ Das Verfahren Der Aufruf dictionaryRepresentation: stattdessen wird ein Wörterbuch zurück, die andere Einstellungen wahrscheinlich enthalten wird, wie es zu einem größeren Umfang gilt.

Wenn Sie einen der Werte herausgefiltert werden müssen, die zurückgesetzt werden, dann über die Tasten laufen ist der Weg, es zu tun. Natürlich, wenn Sie nur wollen, alle die Prefs für die App ohne Rücksicht nuke, dann eine der anderen Methoden, die oben geschrieben ist die effizienteste.

Beantwortet am 18/02/2014 um 02:42
quelle vom benutzer

stimmen
0

Versuchen Sie dieses, Es funktioniert für mich.

Zeile Code

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
Beantwortet am 01/03/2018 um 05:57
quelle vom benutzer

stimmen
0

wenn die Anwendung Einstellung zurückgesetzt , um für den Zugang zu Mikrofon (mein Fall) nsuserdefault, eine einfache Lösung ist die Antwort von Anthony McCormick ( Iphone - Wie Anwendung Zugriff auf Medien auf dem Gerät ermöglichen - ALAssetsLibraryErrorDomain - Code = -3312 „Globalen Zugriff verweigert“ ).

gehen Sie zu Einstellungen> Allgemein auf dem Gerät,> Zurücksetzen> Ort Warnungen zurücksetzen

Beantwortet am 15/08/2014 um 00:15
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more