在第一次加载应用程序时从 Preference Bundle 初始化 IOS Preferences [英] Initialize IOS Preferences from Preference Bundle on first App load

查看:66
本文介绍了在第一次加载应用程序时从 Preference Bundle 初始化 IOS Preferences的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的 AppDelegate.m 中,如果用户尚未进入设置窗格,我将尝试从我的首选项包中初始化默认值.初始化运行,我看到了符合我偏好的正确数量的对象,但它们都是空的,并且没有任何设置.

In my AppDelegate.m I'm trying to initialize the default values from my Preference Bundle if the user hasn't gone to the settings pane yet. The initialize runs, and I see the correct number of objects for my preferences but they're all null and nothing gets set.

+ (void)initialize {
    NSLog(@"Running settings initialization");
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *settingsBundle =
    [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
    NSDictionary *settings =
    [NSDictionary dictionaryWithContentsOfFile:
     [settingsBundle stringByAppendingPathComponent:@"Root.plist"]];

    NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
    NSMutableDictionary *defaultsToRegister =
    [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];

    [defaults registerDefaults:defaultsToRegister];
    [defaults synchronize];

}

推荐答案

您正在注册一个空字典.

You are registering an empty dictionary.

使用:

+ (void)initialize
{
     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"]];
     NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
     NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];

     for (NSDictionary *prefSpecification in preferences)
     {
        NSString *key = [prefSpecification objectForKey:@"Key"];
        if (key)
        {
           // Check if value is registered or not in userDefaults
           id currentObject = [defs objectForKey:key];
           if (currentObject == nil)
           {
              // Not registered: set value from Settings.bundle
              id objectToSet = [prefSpecification objectForKey:@"DefaultValue"];
              [defaultsToRegister setObject:objectToSet forKey:key];
              NSLog(@"Setting object %@ for key %@", objectToSet, key);
           }
           else
           {
              // Already registered
              NSLog(@"Key %@ is already registered with Value: %@).", key, currentObject);
           }
       }
   }

   [defs registerDefaults:defaultsToRegister];
   [defaultsToRegister release];
   [defs synchronize];
}

这篇关于在第一次加载应用程序时从 Preference Bundle 初始化 IOS Preferences的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆