首次应用程序打开时更改整数值

时间:2014-01-06 11:25:56

标签: ios nsuserdefaults

我想在用户第一次打开App时给一个整数值。我设法使用此代码执行此操作:

- (void)viewDidLoad
{
 if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DidOpenBefore"]) {
    NSLog(@"didOpenBefore");
    intNo = intNo;
}else{
    intNo = 5;
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"DidOpenBefore"];
}

它确实有效,但是一旦我第二次运行它,值为0,为什么会发生?它应该坚持我给它的价值(5)对吧?如果我做错了什么或者你能以任何可能的方式帮助我,我将不胜感激。谢谢!

4 个答案:

答案 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。