您的位置:首页 > 产品设计 > UI/UE

iOS学习爬坑记录20:setting bundle中的DefaultValue与registerDefaults方法注册值不一致

2015-05-18 19:55 405 查看
最近在看setting bundle,发现一个问题,

NSDictionary *defaults = @{kWarpDriveKey : @NO,
kWarpFactorKey : @5,
kOfficerKey : @"tianma",
kAuthorizationCodeKey : @"mima"};
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
上述代码写在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中,在viewDidLoad中打印可以看出[NSUserDefaults standardUserDefaults]中的键值更新了,但是进到系统setting设置APP相关界面,仍然保持了Root.plist文件中的默认值(与[NSUserDefaults
standardUserDefaults]取出的值不一致)。

在这种情况下,最好是慎用registerDefaults方法,如果你像我一样在程序中写入的default value与Root.plist文件中设置的DefaultValue不一致的话,容易造成用户误判(虽然只有程序第一次安装运行时),使Root.plist文件中DefaultValue生效的代码如下:(相对于参考文章中,添加了检测DefaultValue是否存在,因为我的Root.plist文件并不是每个键都有DefaultValue)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

NSString *name = [[NSUserDefaults standardUserDefaults] stringForKey:kOfficerKey];
if(!name) {
// 加载默认配置
NSLog(@"!name)");
[self performSelector:@selector(registerDefaultsFromSettingsBundle)];
}

return YES;
}

- (void)registerDefaultsFromSettingsBundle {
NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
if(!settingsBundle) {
NSLog(@"Could not find Settings.bundle");
return;
}

NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];

NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
for(NSDictionary *prefSpecification in preferences) {
NSString *key = [prefSpecification objectForKey:@"Key"];
if(key) {
if ([prefSpecification objectForKey:@"DefaultValue"]) {
[defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
}
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
}


参考文章:http://www.cnblogs.com/elfsundae/archive/2010/12/29/1920869.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐