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?
Clearing NSUserDefaults
quelle vom benutzer TonyNeallon
In anderen Sprachen...
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.
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.
Haben Sie versucht , mit - removeObjectForKey?
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
Hier ist die Antwort in Swift:
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
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.
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
In Swift:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
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)
}
}
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()
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
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!)
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.
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.
Versuchen Sie dieses, Es funktioniert für mich.
Zeile Code
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
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