Cocoa touch 设置包-默认值行为?

Cocoa touch 设置包-默认值行为?,cocoa-touch,ios,settings-bundle,Cocoa Touch,Ios,Settings Bundle,我创建了一个带有单个首选项值的设置包,一个带有默认值的文本字段 当我的应用程序启动时,我检索到的值为null。在用户提供值之前,我是否必须手动编码要使用的值 此外,如果用户在“首选项”屏幕上输入文本字段,然后不做任何更改而将其保留,则不会设置该值。。。用户必须实际更改要保存的值,对吗?如果密钥为空,则可以在应用程序中进行检查,然后可以使用自己的默认值。默认值似乎显示在设置应用程序中,但不会自动存储在NSUserDefaults standardUserDefaults中。因此,如果您找到一个ni

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

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


此外,如果用户在“首选项”屏幕上输入文本字段,然后不做任何更改而将其保留,则不会设置该值。。。用户必须实际更改要保存的值,对吗?

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

默认值似乎显示在设置应用程序中,但不会自动存储在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;
}
- (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];
}
不,不要那样做

这里有一个函数:

id userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults registerDefaults: defaultSettings];
您可以通过迭代设置
plist
文件中
PreferenceSpecifiers
的所有子键来构建参数

大概是这样的:

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

我还没有试过,但这显然比硬编码的默认值更合适:)是的,我不能保证这里的代码。不过,我以前写过,也用过。我正在将这段代码集成到另一个项目中(因此我在这里搜索),所以如果tehre出了什么问题,我会更新它。