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