2010-11-03 7 views
1

On m'a dit que je devais utiliser le registerDefaults: pour charger le NSUserDefaults si l'utilisateur n'a jamais changé les paramètres de l'application.Comment utiliser registerDefaults: correctement, pour charger mes paramètres par défaut?

Dans mon AppDelegate je suis en utilisant le code suivant:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Override point for customization after application launch. 

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

    // Add the view controller's view to the window and display. 
    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 

    return YES; 
} 

je copiais le Root.plist de mes paramètres bundle dans le dossier de mon projet ressources et la rebaptise Defaults.plist

maintenant en la méthode viewDidLoad de mon contrôleur de vue J'utilise le code suivant pour charger les paramètres:

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];

if ((([[defaults objectForKey:kToggleSwitch] isEqualToString:@"Enabled"]) ? YES : NO)) { 

//Do Stuff 
//BTW i'm using strings for the True/False the values of the ON/OFF positions of the UISwitch 

} 

Même avec faire tout cela, mes paramètres par défaut stockés dans le Root.plist de mon paquet de paramètres ne sont pas chargés. La seule façon dont ils se chargent est que l'utilisateur entre dans les paramètres de l'iPhone et consulte simplement la page des paramètres de mon application.

De toute évidence, je fais quelque chose de mal ici quelqu'un peut-il m'aider. BTW, je suis en cours d'exécution à l'aide d'iOS 4.1

+0

ce qui est dans votre Defaults.plist fichier? – jasongregori

+0

il devrait être un dictionnaire avec kToggleSwitch défini à ce qui est par défaut. – jasongregori

Répondre

2

quand je fait mon application, je ne connaissais aucun défaut à enregistrer, donc je fait des réglages par défaut d'un pauvre homme:

J'ai une variable bool: haveConfig, qui est cochée lorsque les paramètres sont chargés:

haveConfig = [prefs boolForKey:@"haveConfig"]; 
if (!haveConfig) 
{ 
    return; 
} 

/* Load settings here */ 
.... 

première fois que le « haveConfig » sera faux, donc je ne les charge pas. Lorsque l'utilisateur change d'abord l'un des paramètres, ils sont stockés en même temps que la variable « haveConfig »:

haveConfig = true; 
[prefs setBool:haveConfig forKey:@"haveConfig"]; 
... 

Je sais que ce n'est pas parfait, mais il fonctionne :-)

+0

cela semble être une idée géniale. Mais comment puis-je savoir si les paramètres ont été chargés, afin de changer le bool à true? – cgossain

+0

Lorsqu'ils modifient les paramètres pour la première fois, je sauvegarde le bool avec la valeur true. La prochaine fois que la condition (! HaveConfig) est vraie quand les paramètres seront chargés :-) – Istvan

Questions connexes