2011-03-30 11 views
8

He creado un archivo Settings.bundle que viene con un archivo Root.plist y un directorio de localización en.lproj.iPhone - reading Setting.bundle devuelve valores erróneos

He editado Root.plist y he agregado varias configuraciones que quiero tener para mi aplicación.

Cuando elimino la aplicación de iPhone, la instalo y ejecuto la primera vez, todas las configuraciones que leo devuelven valores erróneos. Por ejemplo:

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

la bandera viene como NO, incluso si la configuración predeterminada es SÍ.

Si cambio algo en la configuración y correr de nuevo, todas las ejecuciones posteriores me dan los valores correctos (??)

¿Cómo puedo solucionar esto?

gracias

+0

se diferencia de [[NSUserDefaults boolForKey standardUserDefaults]: @ "qualityFlag"]; ?? – 0x8badf00d

+0

He reemplazado con su sugerencia ... sin cambios. Los valores continúan con los mismos valores incorrectos. – SpaceDog

Respuesta

24

Prueba esto:

- (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 !!!!!!!!!!!!!!!!!!!!!!!!!! Solo una pequeña pregunta: ¿necesito agregar [self registerDefaultsFromSettingsBundle]; a applicationDidBecomeActive o applicationWillEnterForeground? – SpaceDog

+0

Pregunta de seguimiento: Publiqué esta pregunta: http://stackoverflow.com/questions/8766979/nsuserdefaults-settings-bundle-plist donde básicamente quiero que el usuario ingrese un valor de URL para usar en la aplicación. A partir de ahora, el usuario puede ingresarlo y guardarlo, pero no se lee cuando se inicia la aplicación. Más bien, el valor predeterminado codificado en el plist es lo que se lee. ¿Podría alguien señalar lo que estoy haciendo mal, por favor? ¿Por qué la aplicación sigue leyendo el valor del marcador de posición predeterminado? – marciokoko

+0

@marciokoko finalmente obtuvo una solución para su problema. Estoy frente a lo mismo! – pnizzle

Cuestiones relacionadas