设置包 - 默认值行为?

问题描述:

我已经创建了一个具有单个首选项值的设置包,这是一个具有默认值的文本字段。设置包 - 默认值行为?

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

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

不,不这样做。

有一个功能是:

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

还没有尝试过,但这个certinly似乎比硬编码的默认值比较合适:) – Nippysaurus 2011-06-08 03:18:05

+0

是啊,我在这里不能保证代码。不过,我已经写过并使用过它。我将这个代码集成到另一个项目中(因此我在这里搜索),所以如果tehre有任何问题,我会更新它。 – 2011-06-08 06:21:06

+0

工作正常。 :) – 2011-06-09 03:53:39

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

似乎默认值显示在设置应用程序中,但不会自动存储在NSUserDefaults standardUserDefaults中。所以如果你发现一个零值,你应该明确地设置默认值。

事情是这样的:

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