2011-03-30 24 views
8

Bir Root.plist dosyası ve bir yerelleştirme rehberi en.lproj ile gelen bir Settings.bundle oluşturdum.iPhone - Setting.bundle öğesinin okunması yanlış değerler döndürüyor

Ben Root.plist düzenlenmiş ve ben uygulamam için sahip olmak istiyorum birkaç ayarları ekledik.

Uygulamayı iPhone'dan silip onu yüklediğimde ve ilk kez çalıştırdığımda, okuduğum tüm ayarlar yanlış değerler döndürüyor. Örneğin, varsayılan ayar YES olsa bile bayrak NO olarak gelir.

Ben ayarlarına şey değiştirerek tekrar çalıştırırsanız, sonraki tüm çalışır bana doğru değerleri (??)

Bunu nasıl çözerim vermek?

sayesinde

+0

den farklı mi [[NSUserDefaults standardUserDefaults] boolForKey: "qualityFlag" @]; ?? – 0x8badf00d

+0

Önerinizle değiştirdim ... hiç değişiklik yok. Değerler aynı yanlış değerleri devam ettirir. – SpaceDog

cevap

24

Bu deneyin:

- (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

YESSSSSSSSSSSSSSSSSSSSSS !!!!!!!!!!!!!!!!!!!!!!!!!! Sadece bir soru: [self registerDefaultsFromSettingsBundle] eklemem gerekir; applicationDidBecomeActive veya applicationWillEnterForeground için? – SpaceDog

+0

Takibi Soru: http://stackoverflow.com/questions/8766979/nsuserdefaults-settings-bundle-plist Temelde kullanıcı uygulamasında kullanılacak bir url değeri girin istiyorum: Bu soruyu yayınlanmıştır. Şu an itibariyle kullanıcı girebilir ve kaydedilebilir, ancak uygulama başlatıldığında geri okunmaz. Daha ziyade plisteki kodlanmış varsayılan değer, okunan değerdir. Birisi neyi yanlış yaptığımı işaret edebilir mi lütfen? Uygulama neden varsayılan yer tutucu değerini hala okuyor? – marciokoko

+0

@marciokoko nihayet probleminiz için bir çözüm buldunuz mu. Aynı bakıyorum! – pnizzle

İlgili konular