代碼段一
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
注釋代碼段二厢洞,重新執(zhí)行代碼段一,發(fā)現(xiàn)打印結果仍舊是lucy筏餐,而并非是jim,原因是:registerDefaults:方法調(diào)用時會check NSUserDefaults里是否已經(jīng)存在了相同的key可免,如果有則不會把其覆蓋。即重新執(zhí)行代碼段一的時候算色,userDefault檢測到已經(jīng)存在了key值"name",所以[userDefault registerDefaults:defaultValues];
方法并沒有覆蓋掉key值"name"對應的value值螟够,所以打印結果仍舊是lucy
執(zhí)行下面代碼:
NSDictionary*defaultValues = [NSDictionarydictionaryWithObjectsAndKeys:@"wuhaiwei",@"name", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
NSString *name =[[NSUserDefaults standardUserDefaults] valueForKey:@"name"];
NSLog(@"%@\n",name);
打印結果仍舊是lucy灾梦,更加印證了上面的結論。
坑
之前認為執(zhí)行下面方法
[[NSUserDefaults standardUserDefaults] synchronize];
就一定會保存成功妓笙,但是最近發(fā)現(xiàn)若河,執(zhí)行該方法后立刻執(zhí)行commond+R數(shù)據(jù)可能會保存不成功。
使用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];
}