NSUserDefaults di compensazione

voti
274

Sto usando +[NSUserDefaults standardUserDefaults]per memorizzare le impostazioni dell'applicazione. Questo consiste di valori stringa circa una dozzina. E 'possibile eliminare questi valori in modo permanente e non solo loro impostazione ad un valore di default?

È pubblicato 13/02/2009 alle 08:49
fonte dall'utente
In altre lingue...                            


15 risposte

voti
495

È possibile rimuovere dominio persistente della domanda come questa:

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

In Swift 3 e versioni successive:

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

Questo è simile alla risposta da @samvermette, ma è un po 'più pulito IMO.

Risposto il 26/07/2011 a 03:55
fonte dall'utente

voti
101

Questo codice ripristina le impostazioni predefinite per il dominio di registrazione:

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

In altre parole, removeObjectForKeyper ogni singolo tasto è mai registrato in tale applicazione.

Crediti a Ken Tommaso su questo sviluppatore forum di Apple filo.

Risposto il 10/06/2010 a 05:40
fonte dall'utente

voti
95

Hai provato con - removeObjectForKey?

 [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
Risposto il 13/02/2009 a 08:51
fonte dall'utente

voti
29

Ecco la risposta a Swift:

let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Risposto il 15/04/2015 a 14:36
fonte dall'utente

voti
27

Se ne avete bisogno durante lo sviluppo, è anche possibile ripristinare il simulatore, l'eliminazione di tutte le NSUserDefaults.

iOS Simulator -> Ripristina contenuto e impostazioni ...

Tenete a mente che sarà anche eliminare tutte le applicazioni ei file sul simulatore.

Risposto il 06/09/2011 a 15:54
fonte dall'utente

voti
13
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
                    [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
Risposto il 20/01/2014 a 04:56
fonte dall'utente

voti
6

In Swift:

let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
Risposto il 18/08/2016 a 10:36
fonte dall'utente

voti
5

Amo le estensioni quando fanno il codice più pulito:

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

        self.removePersistentDomainForName(domainName)
    }
}
Risposto il 22/08/2016 a 22:33
fonte dall'utente

voti
5

Nota: Questa risposta è stata aggiornata per Swift troppo.

Che dire di averlo su una linea?

Estendere @Christopher Rogers risposta - quella accettata.

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

e sì, a volte potrebbe essere necessario synchronizeesso,

[[NSUserDefaults standardUserDefaults] synchronize];

Ho creato un metodo per fare questo,

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

Swift ?

Con la rapida è ancora più facile.

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

E il loro utilizzo :

UserDefaults.clean()
Risposto il 11/08/2015 a 06:02
fonte dall'utente

voti
5

Ho trovato questo:

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 "{}"

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

Risposto il 04/12/2014 a 18:33
fonte dall'utente

voti
2

Si tratta di un bug o qualsiasi altra cosa, ma il removePersistentDomainForNamenon funziona durante la rimozione di tutti i NSUserDefaultsvalori.

Così, l'opzione migliore è quella di ripristinare la PersistentDomaine che si può fare via seguente modo:

NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
Risposto il 09/03/2016 a 08:28
fonte dall'utente

voti
1

Tutte le risposte di cui sopra sono molto rilevanti, ma se qualcuno ancora in grado di ripristinare le userdefaults per app cancellato, quindi è possibile ripristinare le impostazioni del contenuto di voi simulatore, e funzionerà.entrare descrizione dell'immagine qui

Risposto il 16/10/2014 a 09:44
fonte dall'utente

voti
1

Ampliando la risposta di @ Folse ... Credo che una più corretta applicazione sarebbe ...

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];
    }

... chiamando persistentDomainForName di NSUserDefault: metodo. Come lo stato docs, il metodo del "Restituisce un dizionario contenente le chiavi ei valori nel dominio persistente specificato." Chiamata dictionaryRepresentation: invece, restituirà un dizionario che probabilmente includerà altre impostazioni come si applica a un ambito più ampio.

Se avete bisogno di filtrare uno dei valori che devono essere reimpostare, quindi l'iterazione delle chiavi è il modo per farlo. Ovviamente, se si vuole bombardare solo tutte le preferenze per l'applicazione senza tenere conto, allora uno degli altri metodi postato sopra è il più efficiente.

Risposto il 18/02/2014 a 02:42
fonte dall'utente

voti
0

Try This, sta funzionando per me.

Una riga di codice

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
Risposto il 01/03/2018 a 05:57
fonte dall'utente

voti
0

se l'impostazione dell'applicazione che necessitano di ripristino è nsuserdefault per l'accesso al microfono (il mio caso), una soluzione semplice è la risposta da Anthony McCormick ( Iphone - Come abilitare l'accesso alle applicazioni per i media sul dispositivo -? Codice ALAssetsLibraryErrorDomain = -3312 "Global negato l'accesso" ).

sul dispositivo, vai a Impostazioni> Generali> Ripristina> Ripristina avvisi posizione

Risposto il 15/08/2014 a 00:15
fonte dall'utente

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