我在这里看到了不少线程问这个,我已经关注了几个,似乎无法在应用程序被杀死并重新打开后保存。至于从游戏到游戏的工作(不杀死应用程序),它可以适当地保存。
以下是我的高分变量的实例。我遗漏了一些造型,并在那里展示了高分。我觉得这是宣言的内容吗?
//delarations
var highScore = Int()
var highScoreLabel = UILabel()
//post game
if score > highScore {
saveHighScore()
scoreIsHigher = true
}
//and the function
func saveHighScore() {
let highScoreData = UserDefaults.standard
highScore = score
highScoreData.setValue(highScore, forKey: "highScore")
}
编辑: 我在赛前状态中缺少这部分代码,这似乎是触发加载数据的原因。
let highScoreData = UserDefaults.standard
if (highScoreData.object(forKey: "highScore") != nil) {
highScore = highScoreData.value(forKey: "highScore") as! NSInteger!
}
答案 0 :(得分:0)
使用set(_:forKey:)
,而不是设置setValue(_:forKey:)
setValue(_:forKey:)
是一种KVO方法,不是保存到UserDefaults的方法。
您需要在用户获得新的高分后立即将高分更新为UserDefaults
,并在启动时从UserDefaults中将其读取。
答案 1 :(得分:0)
UserDefaults.standard.set(highscore, forKey: "highscore")
使用.set(_,forKey :)方法可以解决您的问题。