2012-01-26 10 views
2

アプリの設定で自分のアプリToggleSwitchで使用しています。私の設定はplistファイルです。アプリの設定バンドル - ToggleSwitch

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
BOOL enabled = [defaults boolForKey:@"enabled_preference"]; 
NSLog(@"enabled = %i",enabled); 

をしかし、私は最初のアプリのトグルスイッチをインストールするときにONになっているが、偽=有効:

Toggle Switch Elements are these: 
Type (required) = Toggle Switch 
Title (required, localizable) = MyToggle 
Key (required) = enabled_preference 
DefaultValue (required) = (BOOL) YES; 
Value for ON = (BOOL) YES 
Value for OFF = (BOOL) NO 

アプリでは、私はこれを認識しません。なぜ私は理解できないのですか?

また、その設定のplistファイルでローカリゼーションを行う方法を教えてください。

答えて

4

これは、最初の起動時に、設定バンドルの設定がまだNSUserDefaultsにロードされていないためです。デフォルト値を設定してregisterDefaultsで登録し、それをapplication:didFinishLaunchingWithOptions:に追加するか、起動するたびに実行されるその他の方法を追加する必要があります。

+0

しかし、これはアプリは、アプリのランチは、私の答えを再読み込み – Streetboy

+0

たびにインストールされていない場合は、設定バンドルからあなたの設定がまだNSUserDefaultsに_not_ているだけで、その後起こります。そういうわけで、あなたはデフォルトで手を差し伸べるべきです。 – mit3z

0

このコードをAppDelegateのappdidfinishlaunchingメソッドに追加すると、最初の起動時にすべてのデフォルトが登録されます。

- (void)registerDefaultsFromSettingsBundle 
{ 
    /* 
    before a user saves a nsdefault the entries in the settings bundle config file are not registereed. 
    The function loops through each preference in the root.plist of the settings.bundle file and registers each key that is not readable (therefore not registered). 
    */ 
    //NSLog(@"Registering default values from Settings.bundle"); 
    NSUserDefaults * defs = [NSUserDefaults standardUserDefaults]; 
    [defs synchronize]; 

    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"]]; 
    if(!settings) 
     return; 

     NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"]; 
    if(!preferences) 
     return; 
     NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]]; 

    for (NSDictionary *prefSpecification in preferences) 
    { 
     NSString *key = [prefSpecification objectForKey:@"Key"]; 
     if (key) 
     { 
      // check if value readable in userDefaults 
      id currentObject = [defs objectForKey:key]; 
      if (currentObject == nil) 
      { 
       // not readable: set value from Settings.bundle 
       id objectToSet = [prefSpecification objectForKey:@"DefaultValue"]; 
       [defaultsToRegister setObject:objectToSet forKey:key]; 
       // NSLog(@"Setting object %@ for key %@", objectToSet, key); 
      } 
        } 
    } 

    [defs registerDefaults:defaultsToRegister]; 
    [defaultsToRegister release]; 
    [defs synchronize]; 
} 
関連する問題