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

StackOverflow https://stackoverflow.com/questions/2076816

Question

J'ai une classe AppDelegate avec la méthode +(void)initialize que j'utiliser pour enregistrer des 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 aussi créé Preferences.xib qui contient deux cases à cocher (NSButton) que de l'état d'affichage des préférences. Ils sont liés à NSUserDefaultsController avec les mêmes touches (fooKey et Barkey dans ce cas). Chaque fois que je lance une application et changer les valeurs par défaut « » ils sont restaurés sur le lancement prochain d'une application.

Est-il possible d'enregistrer « par défaut par défaut » sans écraser les valeurs déjà existantes? Peut-être que chaque fois que je construis et lancer une application de son fichier de préférences est recréée? Peut-être que je délie de cases à cocher NSUserDefaultsController et maintenir les valeurs de moi-même les clés avec un code personnalisé dans les préférences contrôleur de fenêtre?

Je voudrais entendre votre mise en œuvre de choix pour maintenir les valeurs par défaut de l'utilisateur.

J'utilise Mac OS X 10.6.2 et Xcode 3.2.1

Était-ce utile?

La solution

De la documentation -registerDefaults: (souligné dans l'original):

  

Le contenu du domaine d'enregistrement ne sont pas écrites 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 des ressources de l'application et appelez registerDefaults. Avec le contenu que vous avez lu dans de ce fichier

votre code était sur la bonne voie. Voici comment vous enregistrez par défaut par défaut.

J'utilise habituellement ce dans -applicationDidFinishLaunching::

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

L'utilisation d'un plist, il est facile d'ajouter et de modifier les valeurs par défaut dans votre application, et il vous empêche de faire l'erreur d'utiliser @"NO" comme une valeur trop.

Edit: Swift 3 variant

 UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top