2009-10-09 6 views
2

Dans mon viewWillLoad: méthode que je suis en train de faire quelque chose le long de ces lignes:iPhone NSUserDefaults

- (void)viewWillAppear:(BOOL)animated { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults boolForKey:@"enabled_preference"]) { 
     ... 
    } else { 
     ... 
    } 
    [super viewWillAppear:animated]; 
} 

Si je construis et exécuter l'application avant d'ouvrir le panneau de préférences (construit en utilisant une normale Paramètres. bundle) alors le bool semble être NO (ou plus probablement nul) plutôt que la valeur par défaut OUI. Toutefois, si j'ouvre l'application Paramètres et que je consulte le volet des préférences de l'application avant d'ouvrir l'application, tout fonctionne comme prévu.

Je suppose que les préférences de l'application ne sont pas initialisées et je devrais les initialiser à la valeur par défaut (si ce n'est déjà fait) dans le délégué de l'application. Quelqu'un peut-il confirmer cela? Ou est-ce que je manque quelque chose d'autre d'une évidence aveuglante ici?

Répondre

4

Vous devez fournir des valeurs par défaut dans votre code en utilisant -registerDefaults:. Cela est généralement fait dans une méthode +initialize pour n'importe quelle classe utilise les paramètres. Voir Using NSUserDefaults.

+0

Merci, l'ajout de la méthode + initialize {} a fait l'affaire. –

3

L'utilisation de la méthode initialize fonctionne mais j'aime this other answer on stackoverflow qui a du code pour lire les valeurs par défaut de l'ensemble et les utilise pour initialiser les valeurs par défaut. De cette façon, vous n'avez pas à coder en dur les paramètres par défaut dans le code, ils sont dans le plist où ils appartiennent.

+0

Yup. C'est à peu près ce que j'ai fini par faire à la fin, même si c'est un gros trou dans l'API que nous devons faire. Objective-C consiste à ne pas avoir à écrire de gros morceaux de code make-work après tout. –

Questions connexes