web-dev-qa-db-fra.com

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

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

42
Suz

Vous devez utiliser la méthode registerDefaults de NSUserDefaults. Préparez un fichier plist dans votre ensemble qui contient les préférences par défaut, puis utilisez ce 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 ajoutera ces valeurs à un domaine distinct dans la hiérarchie des valeurs par défaut de l'utilisateur. Chaque fois que les valeurs par défaut de l'utilisateur de votre application ne fournissent pas de valeur pour une certaine clé, NSUserDefaults se repliera sur ce domaine et récupérera la valeur à partir de là.

71
Ole Begemann

Si vous avez de nombreuses valeurs par défaut, laissez utiliser la réponse d'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];
}
5
thanhbinh84
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

0
James Webster