gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:31:37 25 4
gpt4 key购买 nike

我不明白如何正确使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com