今天在项目中使用NSUserDefaults存储一个是否提示更新版本的变量,居然花了挺多时间的,猛然才发现一个NSUserDefaults也有这么多名堂,花点时间记录下来。
我的需求是,需要存储一个是否提示更新版本的变量,这个变量默认值是YES,我需要在弹框的“不再提示”按钮事件中,将它变成NO,达到效果。
首先,在APPdelegate中声明该NSUserDefaults属性,以前我使用的是
<pre> if(![[NSUserDefaults standardUserDefaults] boolForKey:@"Remind"]){
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Remind"];
}
</pre>
但是这里有个问题,当我这样子设置时,我的默认值确实是YES,但是后续我没有办法改变他的值,当我在其他函数中将它变成NO时,我在这里的代码判断中:![[NSUserDefaults standardUserDefaults] 就是为YES,所以每次进入AppDelegate中,都会将这个值设置成YES.
经过搜索和理解,我发现NSUserDefaults有一个设置默认值的方法(汗,现在才发现),就是:registerDefaults: 所以代码改为
<pre>NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys:@YES, @"Remind",nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
</pre>
这样,因为使用的NSDictionary作为参数,传入的是对象,所以之后的设置值有一些变化,取值没有变化
<pre>
//设置值
[_Defaults setValue:@NO forKey:@"Remind"];
[_Defaults synchronize];
//取值
[_Defaults boolForKey:@"Remind"]);
</pre>
网友评论