42 votes

Comment définir les valeurs initiales pour les clés NSUserDefault?

Je souhaite définir des valeurs initiales pour mes clés NSUserDefault afin que la première exécution de l'application comporte des paramètres initiaux raisonnables. Je pensais avoir trouvé un moyen simple de faire cela dans le bundle d'applications .plist, mais maintenant je ne le trouve pas. Des idées?

70voto

Ole Begemann Points 85798

Vous devez utiliser l' registerDefaults méthode de NSUserDefaults. Préparer un fichier plist dans votre bundle qui contient les préférences par défaut, puis l'utiliser plist pour enregistrer les valeurs par défaut.

NSString *defaultPrefsFile = [[NSBundle mainBundle] pathForResource:@"defaultPrefs" ofType:@"plist"];
NSDictionary *defaultPreferences = [NSDictionary dictionaryWithContentsOfFile:defaultPrefsFile];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPreferences];

Vous devez exécuter ce code à chaque lancement de votre application. Il va ajouter ces valeurs à un domaine distinct de l'utilisateur par défaut de la hiérarchie. Chaque fois que votre application utilisateur par défaut n'est pas de fournir une valeur pour une clé donnée, NSUserDefaults revient à ce domaine et récupérer la valeur à partir de là.

5voto

doraemon Points 4099

Si vous avez beaucoup de valeurs par défaut, laissez utiliser la réponse de ola , sinon c'est bon pour quelques paramètres

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if (![defaults boolForKey:USERDEFAULT_IS_INITIALIZED]) { 
    [defaults setBool:YES forKey:USERDEFAULT_IS_INITIALIZED];

    // Set initial values 
    ...

    [defaults synchronize];
}
 

0voto

James Webster Points 16663
 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 testé, fait de mémoire

-1voto

Gank Points 324
-(void) loadDef
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    _removeAd=[userDefaults boolForKey:SAVE_AD_STATUS];

    NSString* strDefSetting=[userDefaults stringForKey:SAVE_STATUS_ADSETTING];
    if(strDefSetting==nil
       ||[strDefSetting isEqualToString:@""]
       )
    {
        strDefSetting=@"0.5";
    }

    _floatAdmob=strDefSetting.floatValue;//0.5;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X