首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用设置捆绑包- ToggleSwitch

应用设置捆绑包- ToggleSwitch
EN

Stack Overflow用户
提问于 2012-01-26 16:08:33
回答 2查看 2.4K关注 0票数 2

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

代码语言:javascript
复制
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

在app中,我这样做是为了识别:

代码语言:javascript
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL enabled = [defaults boolForKey:@"enabled_preference"]; 
NSLog(@"enabled = %i",enabled);

但是当我第一次安装app的时候,切换开关是打开的,但是enabled = false。我不明白为什么?

另外,也许一些可以帮助如何在该设置plist文件中进行本地化?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-26 16:48:02

这是因为在第一次启动时,设置包中的设置还没有加载到NSUserDefaults。您必须编写一个方法来设置默认值并将其注册到registerDefaults,然后将其添加到application:didFinishLaunchingWithOptions:或每次启动时执行的任何其他方法中。

票数 4
EN

Stack Overflow用户

发布于 2012-09-28 00:35:47

将此代码添加到AppDelegate中的AppDelegate启动方法中,它会在第一次启动时为您注册所有默认值。

代码语言:javascript
复制
- (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];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9015313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档