设置包 - 默认值行为?

时间:2011-04-12 06:12:52

标签: cocoa-touch ios settings-bundle

我创建了一个包含单个首选项值的设置包,一个带有默认值的文本字段。

当我的应用程序启动并检索该值时,它为null。在用户提供值之前,是否必须手动编码要使用的值?

此外,如果用户进入首选项屏幕并输入文本字段,则保留它而不进行任何更改,将不会设置该值...用户必须实际更改其值才能保存,这是否正确?

3 个答案:

答案 0 :(得分:4)

不,不要那样做。

有一个功能:

id userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults registerDefaults: defaultSettings];

您可以通过在设置PreferenceSpecifiers文件中迭代plist的所有子键来构建参数。

这样的事情:

- (NSDictionary *)readDefaultSettingsFromPlist: (NSString *)inPath;
{
    id mutable = [NSMutableDictionary dictionary];
    id settings = [NSDictionary dictionaryWithContentsOfFile: inPath];
    id specifiers = [settings objectForKey: @"PreferenceSpecifiers"];
    for (id prefItem in specifiers) {
        id key = [prefItem objectForKey: @"Key"];
        id value = [prefItem objectForKey: @"DefaultValue"];
        if ( key && value ) {
            [mutable setObject: value
                        forKey: key];
        }
    }
    return [NSDictionary dictionaryWithDictionary: mutable];
}

答案 1 :(得分:1)

如果你的密钥为空,你可以检查你的应用程序,然后你可以使用自己的默认值。

答案 2 :(得分:1)

似乎默认值显示在“设置应用”中,但不会自动存储在NSUserDefaults standardUserDefaults中。因此,如果找到nil值,则应明确设置默认值。

这样的事情:

+ (NSString *)userDefaultStringForKey:(NSString *)key defaultValue:(NSString *)def {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *val = [defaults stringForKey:key];
    if (val == nil && def != nil) {
        val = def;
        [defaults setObject:val forKey:key];
    }
    return val;
}