我创建了一个带有单个首选项值的设置包,一个带有默认值的文本字段。
当我的应用程序启动并检索到它的值时,它为空。在用户提供值之前,我是否必须手动编码要使用的值?
此外,如果用户对首选项屏幕进行操作并输入文本字段然后离开它而不进行任何更改,则不会设置该值......用户必须实际更改该值才能保存,这是正确的吗?
我创建了一个带有单个首选项值的设置包,一个带有默认值的文本字段。
当我的应用程序启动并检索到它的值时,它为空。在用户提供值之前,我是否必须手动编码要使用的值?
此外,如果用户对首选项屏幕进行操作并输入文本字段然后离开它而不进行任何更改,则不会设置该值......用户必须实际更改该值才能保存,这是正确的吗?
不,不要那样做。
有一个功能:
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];
}
如果您的键为空,您可以签入您的应用程序,然后您可以使用自己的默认值。
似乎默认值显示在设置应用程序中,但不会自动存储在 NSUserDefaults 标准用户默认值中。因此,如果您找到一个 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;
}