我想在用户第一次打开App时给一个整数值。我设法使用此代码执行此操作:
- (void)viewDidLoad
{
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DidOpenBefore"]) {
NSLog(@"didOpenBefore");
intNo = intNo;
}else{
intNo = 5;
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"DidOpenBefore"];
}
它确实有效,但是一旦我第二次运行它,值为0,为什么会发生?它应该坚持我给它的价值(5)对吧?如果我做错了什么或者你能以任何可能的方式帮助我,我将不胜感激。谢谢!
答案 0 :(得分:2)
您需要将int值保存为用户默认值
- (void)viewDidLoad
{
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DidOpenBefore"]) {
NSLog(@"didOpenBefore");
intNo = [[[NSUserDefaults standardUserDefaults] valueForKey:@"intNo"] intValue] ;
}else{
intNo = 5;
[[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithInt:intNo] forKey:@"intNo"];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"DidOpenBefore"];
[[NSUserDefaults standardUserDefaults]synchronize];
}
答案 1 :(得分:2)
您无法使用intNo = intNo;
获取以前的存储值。您必须将其存储在某处(用户默认值,Plist,SQL等),然后从那里读取值。
答案 2 :(得分:1)
Apple有一种特殊的方法可以做到这一点,方法是 - [NSUserDefaults registerDefaults:],把它放在应用程序委托的+(void)初始化方法中的最佳位置就像这样
+ (void)initialize
{
[[NSUserDefault standardDefaults] registerDefaults:<a dictionary of the initial value>];
}
仅当在您的app的用户默认属性列表中找不到这些值时才使用这些值。
我经常会为我的项目创建一个名为InitialUserDefaults的plist文件,然后在我的初始化方法中将其加载为字典并以这种方式播种UserDefaults。
答案 3 :(得分:-1)
如果您希望立即保存默认值,则必须在设置后同步默认值。
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"DidOpenBefore"];
[[NSUserDefaults standardUserDefaults]synchronize];
注意: 你必须将int存储在默认值中,以便下次你得到那个。而不是bool。