代码段一
NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys:@"jim",@"name", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
NSString *name = [[NSUserDefaults standardUserDefaults] valueForKey:@"name"];
NSLog(@"%@\n",name);
此时打印结果:Jim
代码段二
[[NSUserDefaults standardUserDefaults] setValue:@"lucy" forKey:@"name"];
NSString *newName = [[NSUserDefaults standardUserDefaults] valueForKey:@"name"];
NSLog(@"%@\n",newName);
此时打印结果:lucy
注释代码段二,重新执行代码段一,发现打印结果仍旧是lucy,而并非是jim,原因是:registerDefaults:方法调用时会check NSUserDefaults里是否已经存在了相同的key,如果有则不会把其覆盖。即重新执行代码段一的时候,userDefault检测到已经存在了key值"name",所以[userDefault registerDefaults:defaultValues];
方法并没有覆盖掉key值"name"对应的value值,所以打印结果仍旧是lucy
执行下面代码:
NSDictionary*defaultValues = [NSDictionarydictionaryWithObjectsAndKeys:@"wuhaiwei",@"name", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
NSString *name =[[NSUserDefaults standardUserDefaults] valueForKey:@"name"];
NSLog(@"%@\n",name);
打印结果仍旧是lucy,更加印证了上面的结论。
坑
之前认为执行下面方法
[[NSUserDefaults standardUserDefaults] synchronize];
就一定会保存成功,但是最近发现,执行该方法后立刻执行commond+R数据可能会保存不成功。
使用registerDefaults:方法修改webView的UserAgent
UIWebView *webView = [[UIWebView alloc] init];
NSString *TERMINAL = @"HJHZAPP";
NSString *oldAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSRange range = [oldAgent rangeOfString:TERMINAL];
if (range.length <= 0) {
NSString *str = [HJUserAgent userAgent];
NSString *newAgent = [NSString stringWithFormat:@"%@ %@", oldAgent, str];
NSDictionary *dictionnary = @{@"UserAgent":newAgent};
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
}