我有一个增加分数的按钮,如果它是最高分,那么即使应用关闭并再次打开,该数字也会保存为高分。
该部分工作正常,但在我重新打开应用程序并单击按钮后,我的高分会重置并等于分数。我认为这是因为我在调用HighscoreDefault时调用了我的高分变量,但是我不知道你如何访问这个值...如果这就是问题。
重新打开应用后,如何让高分不会更改为低于自身的值?
boolean
答案 0 :(得分:2)
在我看来,保存highscore
最方便的方法是实现这样的计算变量:
var highScore: Int {
get {
return UserDefaults.standard.integer(forKey: "highScore")
}
set {
UserDefaults.standard.set(newValue, forKey: "highScore")
}
}
这样,在控制器或单例中有变量之后,您就不会在考虑UserDefaults
。
答案 1 :(得分:1)
而不是
if let highscore = HighscoreDefault.value(forKey: "highscore") {
otherlabel.text = "\(otherphrase) \(highscore)"
}
在ViewDidLoad
中的代码中添加此行if let highscore = HighscoreDefault.value(forKey: "highscore") {
otherlabel.text = "\(otherphrase) \(highscore)"
self.highscore = highscore as! Int
}
答案 2 :(得分:1)
当您重新打开应用时,UserDefault's
可能会保存您的高分数
您的代码没有将其分配给您的ViewController's
高分变量
if let highscore = HighscoreDefault.value(forKey: "highscore") as? Int {
self.highscore = highscore
otherlabel.text = "\(otherphrase) \(highscore)"
}
答案 3 :(得分:0)
highscore
默认值为0,因此每次第一次调用if (increasingNum > highscore)
的操作应始终为true
。您需要做什么在代码中将HighscoreDefault.value(forKey: "highscore") as? Int
分配给highscore
:
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel(frame: CGRect(x: self.view.frame.size.width / 2 - 100, y: 100, width: 200, height: 20))
label.textAlignment = .center
label.text = "\(phrase) \(increasingNum)"
self.view.addSubview(label)
self.label = label
let otherlabel = UILabel(frame: CGRect(x: self.view.frame.size.width / 2 - 100, y: 200, width: 200, height: 20))
otherlabel.textAlignment = .center
otherlabel.text = "\(otherphrase) \(highscore)"
self.view.addSubview(otherlabel)
self.otherlabel = otherlabel
let button = UIButton(frame: CGRect(x: self.view.frame.size.width / 2 - 150, y: self.view.frame.size.height / 2 - 50, width: 300, height: 100))
button.backgroundColor = UIColor.cyan
button.addTarget(self, action: #selector(scoreGoUp), for: .touchUpInside)
self.view.addSubview(button)
if let highscore = HighscoreDefault.value(forKey: "highscore") as? Int {
// here is the extra job!!
self.highscore = highscore
otherlabel.text = "\(otherphrase) \(highscore)"
}
}
希望它有所帮助。
答案 4 :(得分:0)
在这里开始你的高分:
if let highscoreLast = HighscoreDefault.value(forKey: "highscore") {
otherlabel.text = "\(otherphrase) \(highscore)"
// you should get your highscore here
highscore = highscoreLast
}
答案 5 :(得分:-1)
highscore必须是int而不是int的数组 你应该排序这个数组(升序或减少) 如果新得分>数组中最小的项目和array.count>您的核心默认值的计数 - >你按新分数改变了这个项目。并保存他们 if array.count<只需将newscore添加到数组并保存