ios - 如何在 objective-c 的AppDelegate中加载NSUserDefaults standardUserDefaults

标签 ios objective-c nsuserdefaults appdelegate

我不明白如何正确使用 NSUserDefaults standardUserDefaults。我有 GameOver.m 文件,检查分数是否为高分,如果是,它会像这样保存:

if(score > highScore){
  highScore =score;
  bestScore = highScore;

  NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
  [prefs setInteger:bestScore forKey:@"bestScore"];
  [prefs synchronize];
}

加载高分我使用:

NSUserDefaults *prefs =[NSUserDefaults standardUserDefaults];
NSInteger theHighScore =[prefs integerForKey:@"bestScore"];

它有效,但是在应用程序关闭并重新打开后,高分消失了,我读到,加载过程需要在 的 AppDelegate 文件中 - (void)applicationDidEnterBackground:(UIApplication *)application,如何我可以这样做吗?

编辑
GameScene.m

-(void)Scoring {
  NSUserDefaults *scoreprefs = [NSUserDefaults standardUserDefaults];
  [scoreprefs setInteger:score forKey:@"score"];
}

GameScene.m

#import "GameScene.h"
@implementation GameOver
NSInteger score;
NSInteger highScore;
NSInteger bestScore;

- (id)initWithSize:(CGSize)size playerLose:(BOOL)isLose {
  self = [super initWithSize:size];
  if (self) {
    NSUserDefaults *scoreprefs =[NSUserDefaults standardUserDefaults];
    NSInteger score = [scoreprefs integerForKey:@"score"];

    SKLabelNode *scorelabel = [SKLabelNode labelNodeWithFontNamed:@"Menlo-Bold"];
    scorelabel.text =[NSString stringWithFormat:@"%ld",(long)score];
    // then i define position/fontsize for scoreLabel
    [self addChild:scorelabel];

    if(score > highScore){
      highScore =score;
      bestScore = highScore;

      NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
      [prefs setInteger:bestScore forKey:@"bestScore"];
      [prefs synchronize];
    }

    NSUserDefaults *prefs =[NSUserDefaults standardUserDefaults];
    NSInteger theHighScore =[prefs integerForKey:@"bestScore"];
    SKLabelNode *highscorelabel = [SKLabelNode labelNodeWithFontNamed:@"Menlo-Bold"];
    highscorelabel.text =[NSString stringWithFormat:@"%ld",(long)theHighScore];
    //define position/fontsize for highscorelabel
  }
  return self;
}

就是这样,它。

最佳答案

@interface GameOver ()
@property (nonatomic, assign) NSInteger score;
@property (nonatomic, assign) NSInteger highScore;
@property (nonatomic, assign) NSInteger bestScore;
@end

@implementation GameOver
@synthesize score,bestScore,highScore;

- (id)initWithSize:(CGSize)size playerLose:(BOOL)isLose {
    NSUserDefaults *scoreprefs =[NSUserDefaults standardUserDefaults];

    if (self = [super initWithSize:size]) {
        if (self) {

            score = [scoreprefs integerForKey:@"score"];
            highScore = [scoreprefs integerForKey:@"bestScore"];

            SKLabelNode *scorelabel = [SKLabelNode labelNodeWithFontNamed:@"Menlo-Bold"];
            scorelabel.text =[NSString stringWithFormat:@"%ld",(long)score];
            // then i define position/fontsize for scoreLabel
            [self addChild:scorelabel];

            if(score > highScore){
                highScore =score;
                bestScore = highScore;

                [scoreprefs setInteger:bestScore forKey:@"bestScore"];
                [scoreprefs synchronize];
            }

            SKLabelNode *highscorelabel = [SKLabelNode labelNodeWithFontNamed:@"Menlo-Bold"];
            highscorelabel.text =[NSString stringWithFormat:@"%ld",(long)highScore];
            //define position/fontsize for highscorelabel
        }

    }
        return self;
}

问题是你没有初始化你的 HighScore ,并检查

score(assume 5242)>highScore(nil)

总是正确的

已编辑

关于ios - 如何在 objective-c 的AppDelegate中加载NSUserDefaults standardUserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35797067/

相关文章:

objective-c - UIView 方向不正确

iphone - CIFeature : Is there only Face Detection? 我可以添加行为吗?

ios - 当我们可以使用数组在 swift 中返回多个值时,为什么要使用元组

ios - 如何摆脱 Apple Mach-O 链接器错误?

ios - 使用执行选择器但带有参数创建 SKAction

arrays - 如何使用 NSUserDefaults 在 Swift 中保存 Int 数组?

css - iOS 景观@media 查询问题

objective-c - Cocoa 设置终端退出代码变量

ios - 在 NSUserDefaults 中保存一个元组

swift - 获取 Swift 中日期之间剩余的分钟数