在我的游戏中,我使用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];
}
问题是什么?
答案 0 :(得分:1)
您加载的高分数表单NSUserDefaults
将是Object
类型id
,您应该将其转换为NSNumber
,其次是checkIfHighScore
方法,您应该将highScore.intValue
与gameOverScore
进行比较,然后:
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:gameOverScore] forKey:@"HighScore"];
注意你是如何混合数字对象和标量类型(int
)的,你不能在<
和>
运算符之间使用,甚至不能在==
之间使用Object
{1}}和标量变量。