Je souhaite définir des valeurs initiales pour mes clés NSUserDefault afin que la première exécution de l'application comporte des paramètres initiaux raisonnables. Je pensais avoir trouvé un moyen simple de faire cela dans le bundle d'applications .plist, mais maintenant je ne le trouve pas. Des idées?
Réponses
Trop de publicités?Vous devez utiliser l' registerDefaults
méthode de NSUserDefaults
. Préparer un fichier plist dans votre bundle qui contient les préférences par défaut, puis l'utiliser 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 va ajouter ces valeurs à un domaine distinct de l'utilisateur par défaut de la hiérarchie. Chaque fois que votre application utilisateur par défaut n'est pas de fournir une valeur pour une clé donnée, NSUserDefaults
revient à ce domaine et récupérer la valeur à partir de là.
Si vous avez beaucoup de valeurs par défaut, laissez utiliser la réponse de 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];
}
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
-(void) loadDef
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
_removeAd=[userDefaults boolForKey:SAVE_AD_STATUS];
NSString* strDefSetting=[userDefaults stringForKey:SAVE_STATUS_ADSETTING];
if(strDefSetting==nil
||[strDefSetting isEqualToString:@""]
)
{
strDefSetting=@"0.5";
}
_floatAdmob=strDefSetting.floatValue;//0.5;
}