簡體   English   中英

應用程序設置包-ToggleSwitch

[英]App settings bundle - ToggleSwitch

我在應用設置中的應用ToggleSwitch中使用。 我的設置在plist文件中。

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);

但是,當我第一次安裝應用程序時,撥動開關已打開,但已啟用= false。 我不明白為什么?

也可能有些人可以幫助如何在該設置plist文件中進行本地化?

這是因為首次啟動時,設置捆綁包中的設置尚未加載到NSUserDefaults中。 您必須編寫一種方法來設置默認值,並使用registerDefaults注冊它們,然后將其添加到application:didFinishLaunchingWithOptions:或每次啟動時都會執行的任何其他方法。

將此代碼添加到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];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM