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