NSUserDefault

代码段一

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];
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容