Clearing NSUserDefaults

szavazat
274

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

A kérdést 13/02/2009 08:49
a forrás felhasználó
Más nyelveken...                            


15 válasz

szavazat
495

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.

Válaszolt 26/07/2011 03:55
a forrás felhasználó

szavazat
101

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.

Válaszolt 10/06/2010 05:40
a forrás felhasználó

szavazat
95

Próbáltad segítségével - removeObjectForKey?

 [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
Válaszolt 13/02/2009 08:51
a forrás felhasználó

szavazat
29

Itt a válasz a Swift:

let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Válaszolt 15/04/2015 14:36
a forrás felhasználó

szavazat
27

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.

Válaszolt 06/09/2011 15:54
a forrás felhasználó

szavazat
13
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
                    [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
Válaszolt 20/01/2014 04:56
a forrás felhasználó

szavazat
6

A Swift:

let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
Válaszolt 18/08/2016 10:36
a forrás felhasználó

szavazat
5

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)
    }
}
Válaszolt 22/08/2016 22:33
a forrás felhasználó

szavazat
5

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()
Válaszolt 11/08/2015 06:02
a forrás felhasználó

szavazat
5

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

Válaszolt 04/12/2014 18:33
a forrás felhasználó

szavazat
2

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!)
Válaszolt 09/03/2016 08:28
a forrás felhasználó

szavazat
1

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.írja kép leírása itt

Válaszolt 16/10/2014 09:44
a forrás felhasználó

szavazat
1

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.

Válaszolt 18/02/2014 02:42
a forrás felhasználó

szavazat
0

Próbáld ezt, akkor nekem dolgozik.

Egyetlen kódsor

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
Válaszolt 01/03/2018 05:57
a forrás felhasználó

szavazat
0

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

Válaszolt 15/08/2014 00:15
a forrás felhasználó

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