1

在我的游戏中,我使用 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];
}

问题是什么?

4

1 回答 1

1

您的 highScore 加载表单NSUserDefaults将是Objecttype id,您应该将其转换为NSNumber,其次在您的checkIfHighScore方法中,您应该比较highScore.intValuegameOverScore然后:

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

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

于 2012-07-13T14:57:41.327 回答