按照我的想法,如果用户没有在setting设置值且有default-value,那么应该获取的是default-value,因为打开setting也能看见这些值.但是今天突然发现好像不是那么会事.获取的是null.看了AppPrefs的代码,它也进行了判断.如下:
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
[window addSubview:[navigationController view]];
NSString *testValue = [[NSUserDefaults standardUserDefaults] stringForKey:kFirstNameKey];
if (testValue == nil)
{
// no default values have been set, create them here based on what's in our Settings bundle info
//
NSString *pathStr = [[NSBundle mainBundle] bundlePath];
NSString *settingsBundlePath = [pathStr stringByAppendingPathComponent:@"Settings.bundle"];
NSString *finalPath = [settingsBundlePath stringByAppendingPathComponent:@"Root.plist"];
NSDictionary *settingsDict = [NSDictionary dictionaryWithContentsOfFile:finalPath];
NSArray *prefSpecifierArray = [settingsDict objectForKey:@"PreferenceSpecifiers"];
NSString *firstNameDefault;
NSString *lastNameDefault;
NSNumber *nameColorDefault;
NSNumber *backgroundColorDefault;
NSDictionary *prefItem;
for (prefItem in prefSpecifierArray)
{
NSString *keyValueStr = [prefItem objectForKey:@"Key"];
id defaultValue = [prefItem objectForKey:@"DefaultValue"];
if ([keyValueStr isEqualToString:kFirstNameKey])
{
firstNameDefault = defaultValue;
}
else if ([keyValueStr isEqualToString:kLastNameKey])
{
lastNameDefault = defaultValue;
}
else if ([keyValueStr isEqualToString:kNameColorKey])
{
nameColorDefault = defaultValue;
}
else if ([keyValueStr isEqualToString:kBackgroundColorKey])
{
backgroundColorDefault = defaultValue;
}
}
// since no default values have been set (i.e. no preferences file created), create it here
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
firstNameDefault, kFirstNameKey,
lastNameDefault, kLastNameKey,
nameColorDefault, kNameColorKey,
backgroundColorDefault, kBackgroundColorKey,
nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
[[NSUserDefaults standardUserDefaults] synchronize];
}
// we're ready to do, so lastly set the key preference values
firstName = [[NSUserDefaults standardUserDefaults] stringForKey:kFirstNameKey];
lastName = [[NSUserDefaults standardUserDefaults] stringForKey:kLastNameKey];
textColor = [[NSUserDefaults standardUserDefaults] integerForKey:kNameColorKey];
backgroundColor = [[NSUserDefaults standardUserDefaults] integerForKey:kBackgroundColorKey];
}

本文探讨了iOS应用中如何处理用户未设置的偏好选项,并通过读取默认值来初始化这些设置的过程。介绍了当用户未手动设置时,从Settings.bundle中加载默认配置的方法。
2273

被折叠的 条评论
为什么被折叠?



