使用NSUserDefaults保存高分时出错

时间:2014-03-05 16:05:33

标签: ios iphone objective-c nsuserdefaults

我正在使用SpriteKit制作游戏。我第一次输掉比赛时,得分为0(好)。然后,我保存当前的分数。下一次我玩,高分是一个很大的数字,例如366508176.为什么会发生这种情况,以及如何解决这个问题呢?

这是ScoreScene.m文件,它的超类是SKScene。 [GameScene getScore]是一个返回最后得分的静态函数。

//
//  ScoreScene.m
//

#import "ScoreScene.h"
#import "GameScene.h"
@interface ScoreScene()
@property BOOL contentCreated;
@end

@implementation ScoreScene
-(void)didMoveToView:(SKView *)view
{
    if (!self.contentCreated) {
        [self createSceneContents];
        self.contentCreated=YES;
    }
}

-(void)createSceneContents
{
    self.backgroundColor=[SKColor purpleColor];
    self.scaleMode=SKSceneScaleModeAspectFill;


    NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
    int highScore=(int)[userDefaults objectForKey:@"HighScore"];
    //highScore is 0 the first time, 366508176 the second 

    int currentScore=[GameScene getScore];
    //currentScore is 3, for example
    if (currentScore>highScore) {

        [userDefaults setInteger:currentScore forKey:@"HighScore"];
        [userDefaults synchronize];
        highScore=currentScore;
    }
    [self addChild:[self newHighScoreLabel:highScore]];
    [self addChild:[self newScoreLabel]];
    [self addChild:[self newStartLabel]];
}


...




@end

3 个答案:

答案 0 :(得分:0)

而不是:

int highScore=(int)[userDefaults objectForKey:@"HighScore"];

你需要做

int highScore = [userDefaults integerForKey:@"HighScore"];

答案 1 :(得分:0)

集:

[[NSUserDefaults standardUserDefaults] setInteger:highScore forKey:@"HighScore"]

得到:

[[NSUserDefaults standardUserDefaults] integerForKey:@"HighScore"]

答案 2 :(得分:0)

或者,在NSNumbers中“包装”标量是一个更通用的目的,它会给你:

[defaults setObject:[NSNumber numberWithInt:highScore] forKey:@"HighScore"];

int HighScore = [[defaults objectForKey:@"HighScore"] intValue];

这样做的好处是,对象现在可以轻松放入集合中,传递给通知等等。