33 votes

Comment enregistrer les valeurs par défaut des utilisateurs à l'aide de NSUserDefaults sans écraser les valeurs existantes ?

J'ai une classe AppDelegate avec +(void)initialize que j'utilise pour enregistrer certaines valeurs par défaut. Voici le code que j'utilise :

+ (void)initialize {
  NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];

  [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}

J'ai également créé Preferences.xib qui contient quelques cases à cocher ( NSButton ) qui affichent le statut des préférences. Ils sont liés à NSUserDefaultsController avec les mêmes clés (fooKey et barKey dans ce cas). Chaque fois que je lance une application et que je modifie les "valeurs par défaut", elles sont restaurées au prochain lancement de l'application.

Existe-t-il un moyen d'enregistrer des "valeurs par défaut" sans écraser les valeurs déjà existantes ? Peut-être que chaque fois que je construis et lance une application, son fichier de préférences est recréé ? Je devrais peut-être délier les cases à cocher de NSUserDefaultsController et maintenir moi-même les valeurs des clés avec un code personnalisé dans le contrôleur de fenêtre des préférences ?

J'aimerais connaître votre choix d'implémentation pour maintenir les valeurs par défaut des utilisateurs.

J'utilise Mac OS X 10.6.2 et XCode 3.2.1.

75voto

Johan Kool Points 8778

Dans la documentation de -registerDefaults: (accentuation ajoutée) :

Le contenu du domaine d'enregistrement n'est pas écrit sur le disque ; vous devez appeler cette méthode à chaque fois que votre application démarre . Vous pouvez placer un fichier plist dans le répertoire Ressources de l'application et appeler registerDefaults : avec le contenu que vous lisez dans ce fichier.

Donc votre code était sur la bonne voie. C'est ainsi que vous enregistrez les valeurs par défaut.

Je l'utilise généralement dans -applicationDidFinishLaunching: :

    // Load default defaults
    [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];

L'utilisation d'une plist facilite l'ajout et la modification des valeurs par défaut dans votre application, et vous évite de commettre l'erreur d'utiliser la fonction @"NO" comme une valeur également.

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