Én használ +[NSUserDefaults standardUserDefaults]tárolni alkalmazás beállításait. Ez abból áll, nagyjából egy tucat szöveges adatok. Lehetséges, hogy törölje ezeket az értékeket folyamatosan helyett csak be őket az alapértelmezett érték?
Clearing NSUserDefaults
Akkor távolítsa el az alkalmazást kitartó tartomány, mint ez:
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
A Swift 3 és újabb:
if let bundleID = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: bundleID)
}
Ez hasonló a következőképpen válaszoljon @samvermette de egy kicsit tisztább IMO.
Ez a kód visszaállítja az alapértelmezett beállításokat a regisztrációs domaint:
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
Más szóval, removeObjectForKeyminden egyes billentyű valaha regisztrált az adott alkalmazás.
Hitelek Ken Thomases ebben Apple Developer Fórum téma.
Próbáltad segítségével - removeObjectForKey?
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
Itt a válasz a Swift:
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Ha szükség van rá, míg a fejlődő, akkor is visszaállíthatja a szimulátor, eltörölve minden NSUserDefaults.
iOS Simulator -> Reset Content and Settings ...
Tartsuk szem előtt, hogy ez is törli az összes alkalmazást és fájlokat szimulátor.
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
A Swift:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
Szeretem kiterjesztéseket, amikor teszik a kód tisztább:
extension NSUserDefaults {
func clear() {
guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
return
}
self.removePersistentDomainForName(domainName)
}
}
Megjegyzés: Ez a válasz frissült Swift is.
Mi a helyzet, hogy azt az egy sorban?
Kiterjesztése @Christopher Rogers válasz - az elfogadott egy.
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
és igen, néha szükség lehet synchronizerá,
[[NSUserDefaults standardUserDefaults] synchronize];
Létrehoztam egy módszer, hogy ezt,
- (void) clearDefaults {
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
[[NSUserDefaults standardUserDefaults] synchronize];
}
Swift ?
A gyors a még könnyebb.
extension UserDefaults {
class func clean() {
guard let aValidIdentifier = Bundle.main.bundleIdentifier else { return false }
self.standard.removePersistentDomain(forName: aValidIdentifier)
self.standard.synchronize()
}
}
És használat :
UserDefaults.clean()
Ezt találtam:
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 "{}"
Forrás: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
Ez egy hiba, vagy bármi, de a removePersistentDomainForNamenem működik, míg kitörölje az összes NSUserDefaultsértéket.
Tehát jobb lehetőség, hogy állítsa vissza a PersistentDomainés hogy meg lehet csinálni keresztül következő módon:
NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
Minden fenti válaszok nagyon fontos, de ha valaki még mindig nem tudja visszaállítani a userdefaults törölt app, akkor állítsa vissza a tartalom beállításait akkor szimulátor, és működni fog.
Bővülő @ folse válasza ... Úgy vélem, egy helyes végrehajtása lenne ...
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];
}
... hívja NSUserDefault a persistentDomainForName: módszer. Mivel a docs állam, a módszer „vissza egy szótár, amely tartalmazza a kulcsokat és értékeket a megadott tartós tartomány.” Calling dictionaryRepresentation: ahelyett, vissza fog térni egy szótár, amely valószínűleg tartalmaz egyéb beállításokat, mivel azokra a szélesebb körét.
Ha meg kell szűrni minden olyan értékek, amelyeket fel kell állítani, majd ismételve át a kulcsokat az utat megtenni. Nyilvánvaló, hogy ha azt akarjuk, hogy csak nuke összes prefs az alkalmazás tekintet nélkül, akkor egy másik módszer írt felett a leghatékonyabb.
Próbáld ezt, akkor nekem dolgozik.
Egyetlen kódsor
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
ha az alkalmazás beállítás szoruló reset nsuserdefault való hozzáférés mikrofon (az én esetemben), egyszerű megoldás választ Anthony McCormick ( Iphone - Hogyan történő alkalmazásához a médiához való hozzáférés a készülék? - ALAssetsLibraryErrorDomain Code = -3312 „Global megtagadták” ).
A készüléken a Beállítások> Általános> Visszaállítás> Reset Location figyelmeztetések













