Ios Highscore在应用程序关闭或视图更改时重置。如何永久保持Swift的高分?
实例变量:Ios Highscore在应用程序关闭或视图更改时重置。如何永久保持Swift的高分?,ios,swift2,nsuserdefaults,Ios,Swift2,Nsuserdefaults,实例变量: var Score: Int64 = 0 var highscore: Int64 = 0 func saveHighScore(high:Int) { NSUserDefaults.standardUserDefaults().setInteger(high, forKey: "highscore") } func highScore() -> Int { NSUserDefaults.standard
var Score: Int64 = 0
var highscore: Int64 = 0
func saveHighScore(high:Int) {
NSUserDefaults.standardUserDefaults().setInteger(high, forKey: "highscore")
}
func highScore() -> Int {
NSUserDefaults.standardUserDefaults().integerForKey("highscore")
} func resetHighScore() {NSUserDefaults.standardUserDefaults().removeObjectForKey("highscore")
}
///METHOD. ALL OF THIS IS WORKING FINE. HIGH SCORE SHOWS AND UPDATES WHILE IN THE GAME.
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func Ans1(sender: AnyObject) {
if(CorrectAnswer) == "1" {
// Calculate the number of points
Score += 10
scoreLabel.text = "Score:\(Score)"
if (Score > highscore) {
highscore = Score
highScoreLabel.text = NSString(format: "High Score : %i", highscore) as String
}
我需要在这里添加什么吗?要在重新启动应用程序时保存和重新加载数据?在代码开头,变量“highscore”重置为0。应使用“if”语句查看nsuserdefaults中是否存在键为“highscore”的整数,如果没有,请将键“highscore”的值设置为0,否则,将变量highscore设置为等于键“highscore”的值。我为缺少代码提前表示歉意。似乎您从未调用您的方法
saveHighScore()
或highscore()
。相反,每次加载视图时,highscore变量都设置为0
在您的生命周期方法中,如viewDidLoad()
或viewdidappease()
,您必须调用并设置它,如下所示:highscore=highscore()
。这将获得用户默认值,并将视图中的highscore变量设置为保存的内容
在您的direceivememorywarning()
或更好的viewwilldiscome()
中,您应该调用saveHighScore(highscore)
这样,您的所有进度都应该通过关闭和重新打开应用程序来保存和保持 NSUserDefaults是您需要的:
let highscore = 1000
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setValue(highscore, forKey: "highscore")
userDefaults.synchronize()
Ref:仅为确认,每当视图消失或应用程序进入后台时,您希望在NSUserDefaults中删除ObjectForkey?方法
resetHighScore()
何时调用?我是否可以观察到forKey:“highscore”
是一个相当奇怪的键。你添加了一些符号或者只是在复制粘贴时出现的?我不确定你关于删除ObjectForKey的意思是什么?这些奇怪的符号是在我发布问题时出现的。它们实际上不在我的代码中。resetHighScore在其他任何地方都不会被调用。你能告诉我代码中应该放在哪里吗?它在视图中加载吗?