保存并加载数据

时间:2012-07-13 14:54:21

标签: objective-c xcode nsuserdefaults

在我的游戏中,我使用NSUserDefults来保存用户的高分。在我第一次完成游戏时,我的高分被设置为游戏分数,但每次之后,游戏中的分数自动设置为高分。这里的怪异是我的比赛得分为0然后我的高分保持最高分,但如果在某场比赛结束时我得分为100则设为高分,但如果我的得分为50我的高分是设置为50(尽管得分低于我的高分)。 这是我的viewdidload代码:

    highScore = [[[NSUserDefaults standardUserDefaults] objectForKey:@"HighScore"] intValue ];
highScoreLabel.text = [NSString stringWithFormat:@"%d",highScore];

这是我的checkIfHighscore代码:

-(void)checkIfHighScore
{
    if(gameOverScore > highScore)
    {
        highScore = gameOverScore;
        [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:highScore] forKey:@"HighScore"];
        [[NSUserDefaults standardUserDefaults] synchronize];

    }
    highScoreLabel.text = [NSString stringWithFormat:@"%d", highScore];
}

问题是什么?

1 个答案:

答案 0 :(得分:1)

您加载的高分数表单NSUserDefaults将是Object类型id,您应该将其转换为NSNumber,其次是checkIfHighScore方法,您应该将highScore.intValuegameOverScore进行比较,然后:

[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:gameOverScore] forKey:@"HighScore"];

注意你是如何混合数字对象和标量类型(int)的,你不能在<>运算符之间使用,甚至不能在==之间使用Object {1}}和标量变量。