Desidero impostare alcuni valori iniziali per i miei tasti NSUserDefault in modo che la prima esecuzione dell'app abbia alcune impostazioni iniziali ragionevoli. Pensavo di aver trovato un modo semplice per farlo nel pacchetto app .plist, ma ora non riesco a trovarlo. Qualche idea?Come impostare i valori iniziali per NSUserDefault Keys?
risposta
Si consiglia di utilizzare il metodo di NSUserDefaults
registerDefaults
. Preparare un file plist nel pacchetto che contenga le preferenze predefinite e quindi utilizzare tale plist per registrare i valori predefiniti.
NSString *defaultPrefsFile = [[NSBundle mainBundle] pathForResource:@"defaultPrefs" ofType:@"plist"];
NSDictionary *defaultPreferences = [NSDictionary dictionaryWithContentsOfFile:defaultPrefsFile];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPreferences];
Devi eseguire questo codice ad ogni avvio della tua app. Aggiungerà questi valori a un dominio separato nella gerarchia delle impostazioni predefinite dell'utente. Ogni volta che le impostazioni predefinite dell'utente della tua app non forniscono un valore per una determinata chiave, NSUserDefaults
ricadrà su questo dominio e recupererà il valore da lì.
Sembra che questo registri i valori predefiniti in una posizione di memoria volatile. Non voglio che ritorni alle impostazioni predefinite molto spesso. Questo è principalmente per il 1 ° lancio. I valori impostati dall'utente verranno preservati o saranno sovrascritti occasionalmente da questo? – Suz
Cosa intendi per "posizione memoria volatile"? Devi eseguire questo codice ad ogni avvio della tua app. Aggiungerà questi valori a un dominio separato nella gerarchia delle impostazioni predefinite dell'utente. Ogni volta che le impostazioni predefinite dell'utente della tua app non forniscono un valore per una determinata chiave, 'NSUserDefaults' ricadrà su questo dominio e recupererà il valore da lì. –
La User Programming Defaults Programming elenca NSRegistrationDomain come avente uno stato 'volatile', al contrario di 'persistente'. Pertanto, le impostazioni predefinite dell'utente sono permanenti e le impostazioni predefinite sono volatili e devono essere ricaricate in ogni avvio dell'app. Mi sembra strano che il valore 'fall back' sia meno persistente rispetto all'impostazione dell'utente. – Suz
if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"initialValuesHaveBeenWritten"])
{
[[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:key1];
[[NSUserDefaults standardUserDefaults] setValue:obj2 forKey:key2];
[[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:@"initialValuesHaveBeenWritten"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
NB: Non testato, fatto dalla memoria
Questo non è il modo corretto per farlo. Funziona, ma non è quello che Apple suggerisce. Utilizzare -registerDefaults come descritto nella risposta di @ole oppure aggiungerli direttamente al dominio NSRegistrationDomain. –
Sono d'accordo. Non ho saputo di registerDefaults quando ho scritto questa risposta, ma ora la uso. –
Se si dispone di molti valori di default, diamo utilizzare ola's answer, altrimenti questo è un bene per un paio di params
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults boolForKey:USERDEFAULT_IS_INITIALIZED]) {
[defaults setBool:YES forKey:USERDEFAULT_IS_INITIALIZED];
// Set initial values
...
[defaults synchronize];
}
-(void) loadDef
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
_removeAd=[userDefaults boolForKey:SAVE_AD_STATUS];
NSString* strDefSetting=[userDefaults stringForKey:SAVE_STATUS_ADSETTING];
if(strDefSetting==nil
||[strDefSetting isEqualToString:@""]
)
{
[email protected]"0.5";
}
_floatAdmob=strDefSetting.floatValue;//0.5;
}
- 1. django ModelMultipleChoiceField impostare valori iniziali
- 2. Django: come impostare i valori iniziali per un campo in un formset del modello in linea?
- 3. Costruzione classe con valori iniziali
- 4. Come impostare i dati iniziali per il modulo di istanza di Django admin model?
- 5. Come visualizzare più zeri iniziali per i valori in virgola mobile in C++?
- 6. Mappatura di dead keys come "^"
- 7. Siti per i programmatori Delphi iniziali
- 8. Filetto NSUserDefault è sicuro?
- 9. Modo preferito per impostare i valori predefiniti delle proprietà nullable?
- 10. Impostare i valori con una query Linq?
- 11. C'è un modo per impostare i valori in LINQ?
- 12. ggplot2: impostare i valori (non lineari) per alpha
- 13. CQL: Invalid impostare letterale per i valori di tipo mappa
- 14. Trapping arrow keys
- 15. Impostazione dei valori iniziali della direttiva Angular-UI Select2 multipla
- 16. gpg --export-secret-keys
- 17. Come impostare i valori degli attributi utilizzando la riflessione
- 18. Differenza tra portachiavi e NSUserDefault?
- 19. Non dovrebbe NSUserDefault essere una lavagna pulita per i test unitari?
- 20. Come evitare i valori duplicati in enum?
- 21. Come posso impostare i valori predefiniti usando Getopt :: Std?
- 22. Come impostare i valori predefiniti in un record
- 23. Come impostare i valori delle proprietà di sistema in NetBeans?
- 24. Come impostare i valori dei dati su Kendo Multi Select?
- 25. array associativi ".keys()"
- 26. redis come limitare il numero di ritorno del comando KEYS?
- 27. Oracle: ricerca di valori con spazi iniziali o finali
- 28. Range Keys in CouchDB Views
- 29. per tagliare gli spazi iniziali iniziali o finali
- 30. Formati iniziali per i moduli in linea Django
Controllare questo: http://jayprakashdubey.blogspot.in/2014/07/nsuserdefault -usage.html –