bundle de parameters – comportement de valeur par défaut?

J'ai créé un set de parameters avec une seule valeur de preference, un champ de text avec une valeur par défaut.

Lorsque mon application se lance et que je récupère la valeur, elle est nulle. Dois-je coder manuellement la valeur à utiliser avant que l'user ait fourni une valeur?

Aussi si l'user fait à l'écran de preferences et entre dans le champ de text puis le laisse sans faire aucun changement la valeur ne sera pas établie … l'user doit réellement changer la valeur pour que soit sauvé, est-ce correct?

Non, ne fais pas ça.

Il y a une fonction pour cela:

id userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults registerDefaults: defaultSettings]; 

Vous pouvez build le paramètre en répétant toutes les sous-keys de PreferenceSpecifiers dans votre file plist parameters.

Quelque chose comme ça:

 - (NSDictionary *)readDefaultSettingsFromPlist: (NSSsortingng *)inPath; { id mutable = [NSMutableDictionary dictionary]; id settings = [NSDictionary dictionaryWithContentsOfFile: inPath]; id specifiers = [settings objectForKey: @"PreferenceSpecifiers"]; for (id prefItem in specifiers) { id key = [prefItem objectForKey: @"Key"]; id value = [prefItem objectForKey: @"DefaultValue"]; if ( key && value ) { [mutable setObject: value forKey: key]; } } return [NSDictionary dictionaryWithDictionary: mutable]; } 

Vous pouvez save votre application si vous obtenez null pour key, vous pouvez utiliser votre propre valeur par défaut.

Il semble que la valeur par défaut est affichée dans l'application Paramètres, mais n'est pas automatiquement stockée dans NSUserDefaults standardUserDefaults. Donc, si vous trouvez une valeur nulle, vous devez définir explicitement la valeur par défaut.

Quelque chose comme ça:

 + (NSSsortingng *)userDefaultSsortingngForKey:(NSSsortingng *)key defaultValue:(NSSsortingng *)def { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSSsortingng *val = [defaults ssortingngForKey:key]; if (val == nil && def != nil) { val = def; [defaults setObject:val forKey:key]; } return val; }