设置包 – 默认值行为?

我创build了一个具有单个首选项值的设置包,这是一个具有默认值的文本字段。

当我的应用程序启动,我检索它的值为空。 在用户提供一个值之前,是否必须手动编写要使用的值?

此外,如果用户做了喜好屏幕,并进入文本字段,然后离开它没有做任何改变的价值将不会被设置…用户必须实际改变它的值来保存,这是正确的?

不,不这样做。

有一个这样的function:

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

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

像这样的东西:

 - (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 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; } 
Interesting Posts