2011-12-12 9 views
40

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?

+0

Controllare questo: http://jayprakashdubey.blogspot.in/2014/07/nsuserdefault -usage.html –

risposta

68

Si consiglia di utilizzare il metodo di NSUserDefaultsregisterDefaults. 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ì.

+0

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

+4

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ì. –

+0

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

0
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

+1

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. –

+0

Sono d'accordo. Non ho saputo di registerDefaults quando ho scritto questa risposta, ma ora la uso. –

5

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]; 
} 
-1
-(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; 
} 
Problemi correlati