2011-03-30 5 views
8

J'ai créé un fichier Settings.bundle fourni avec un fichier Root.plist et un répertoire de localisation en.lproj.iPhone - lecture Setting.bundle renvoie des valeurs erronées

J'ai modifié Root.plist et ajouté plusieurs paramètres que je veux avoir pour mon application.

Lorsque je supprime l'application de l'iPhone et l'installe et s'exécute la première fois, tous les paramètres que j'ai lus retournent des valeurs erronées. Par exemple:

highQualityFlag = [[[NSUserDefaults standardUserDefaults] stringForKey:@"qualityFlag"] boolValue]; 

le drapeau est NON, même si le paramètre par défaut est OUI.

Si je change quelque chose sur les paramètres et exécuter à nouveau, toutes les séries suivantes me donnent les valeurs correctes (??)

Comment puis-je résoudre cela?

grâce

+0

est-il différent de [[NSUserDefaults standardUserDefaults] boolForKey: @ "qualityFlag"]; ?? – 0x8badf00d

+0

J'ai remplacé avec votre suggestion ... aucun changement du tout. Les valeurs continuent les mêmes valeurs incorrectes. – SpaceDog

Répondre

24

Essayez ceci:

- (void)registerDefaultsFromSettingsBundle 
{ 
    NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"]; 
    if(!settingsBundle) 
    { 
     //NSLog(@"Could not find Settings.bundle"); 
     return; 
    } 

    NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]]; 
    NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"]; 

    NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]]; 
    for(NSDictionary *prefSpecification in preferences) 
    { 
     NSString *key = [prefSpecification objectForKey:@"Key"]; 
     if(key) 
     { 
      [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key]; 
     } 
    } 

    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister]; 
    [defaultsToRegister release]; 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    [self registerDefaultsFromSettingsBundle]; 

    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     [window makeKeyAndVisible]; 
    return YES; 
} 
+0

YESSSSSSSSSSSSSSSSSSSS !!!!!!!!!!!!!!!!!!!!!!! Juste une petite question: dois-je ajouter [self registerDefaultsFromSettingsBundle]; à applicationDidBecomeActive ou applicationWillEnterForeground? – SpaceDog

+0

Suivi Question: J'ai posté cette question: http://stackoverflow.com/questions/8766979/nsuserdefaults-settings-bundle-plist où je veux essentiellement que l'utilisateur entre une valeur d'URL à utiliser dans l'application. À partir de maintenant, l'utilisateur peut entrer et il est enregistré, mais il n'est pas relu lorsque l'application est lancée. Plutôt la valeur par défaut codée en dur dans le plist est ce qui est lu. Quelqu'un pourrait-il souligner ce que je fais mal s'il vous plaît. Pourquoi l'application lit-elle toujours la valeur de l'espace réservé par défaut? – marciokoko

+0

@marciokoko avez-vous finalement trouvé une solution à votre problème? Suis face à la même chose! – pnizzle

Questions connexes