2012-01-26 60 views
2

我的应用程序设置使用我的应用程序ToggleSwitch。我的设置在plist文件中。应用程序设置捆绑 - ToggleSwitch

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 

在应用我这样做是为了认识:

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

但是,当我第一次安装的应用程序切换开关ON,但启用=假。我不明白为什么?

而且也许有些可以帮助该怎么做本地化在设置的plist文件?

回答

4

这是因为在第一次启动您在设置包的设置都不会加载到尚未NSUserDefaults的。你必须写来设置默认值,并与registerDefaults注册它们,并把它添加到application:didFinishLaunchingWithOptions:或大干快上每次启动执行任何其他方法的方法。

+0

但是,当安装程序不会每次应用午餐 – Streetboy

+0

重读我的回答出现这种情况就在这时,从设置包的设置是在_不_ NSUserDefaults的呢。这就是为什么你应该手工提供违约。 – mit3z

0

将此代码添加到您的appdidfinishlaunching方法在AppDelegate中,它在首次启动时为您注册所有默认设置。

- (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]; 
}