Ich habe eine Schaltfläche, die eine Punktzahl erhöht, und wenn es die höchste Punktzahl ist, wird diese Nummer als Highscore gespeichert, auch nachdem die App geschlossen und wieder geöffnet wird.Swift 3: Wie speichern Sie eine Highscore programmgesteuert?
Dieser Teil funktioniert gut, aber nachdem ich die App wieder öffnen und auf den Button klicken, wird mein Highscore zurückgesetzt und wird gleich der Punktzahl. Ich denke, das liegt daran, dass ich meine Highscore-Variable anrufe, wenn ich meinen HighscoreDefault aufrufen sollte, aber ich verstehe nicht, wie Sie auf diesen Wert zugreifen ... wenn das sogar das Problem ist.
Wie kann ich verhindern, dass der Highscore nach dem erneuten Öffnen der App auf niedrigere Werte als er selbst wechselt?
import UIKit
class ViewController: UIViewController {
let phrase = "Your Score: "
var increasingNum = 0
let otherphrase = "High Score: "
var highscore = 0
var label: UILabel?
var otherlabel: UILabel?
let HighscoreDefault = UserDefaults.standard
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") {
otherlabel.text = "\(otherphrase) \(highscore)"
}
}
func scoreGoUp (sender: UIButton){
increasingNum += 1
self.label?.text = "\(phrase) \(increasingNum)"
if (increasingNum > highscore){
highscore = increasingNum
self.otherlabel?.text = "\(otherphrase) \(highscore)"
HighscoreDefault.set(highscore, forKey: "highscore")
}
}
}
Zuallererst nie 'valueForKey' in' UserDefaults' verwenden, außer Sie wissen wirklich was Sie tun. Es gibt eine dedizierte Methode 'integer (forKey:' – vadian