Swift Nsuserdefaults高分保存
当我按下“tapPressed”按钮,score++,然后它保存为highscore,问题是当我重新启动应用程序时,我保存了highscore。当我按下“tapPressed”时,highscore再次从零开始。将viewDidLoad更改为:Swift Nsuserdefaults高分保存,swift,nsuserdefaults,Swift,Nsuserdefaults,当我按下“tapPressed”按钮,score++,然后它保存为highscore,问题是当我重新启动应用程序时,我保存了highscore。当我按下“tapPressed”时,highscore再次从零开始。将viewDidLoad更改为: var score = 0 var highscore = 0 var defaults = NSUserDefaults.standardUserDefaults() @IBOutlet weak var scoreResult: UILabel!
var score = 0
var highscore = 0
var defaults = NSUserDefaults.standardUserDefaults()
@IBOutlet weak var scoreResult: UILabel!
@IBOutlet weak var highScoreResult: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
if let hscore = defaults.valueForKey("highscore") {
highScoreResult.text = String(hscore)
}
}
@IBAction func tapPressed(sender: AnyObject) {
score++
scoreResult.text = String(score)
if score > highscore {
highscore = score
highScoreResult.text = String(highscore)
defaults.setValue(highscore, forKey: "highscore")
defaults.synchronize()
}
}
应用程序启动后,将从默认值加载高分。在您的
视图中加载
您需要将语句更改为:
override func viewDidLoad() {
super.viewDidLoad()
if let hscore = defaults.valueForKey("highscore") {
highscore = hscore
highScoreResult.text = String(hscore)
}
}
其他答案描述了错误的原因。此外,我还想描述如何正确使用
NSUserDefaults
建议的方法是注册键/值对,使其具有可靠的默认值,以防首选项文件被删除或应用程序第一次启动
在AppDelegate(ApplicationIDFinishLaunching
或更早版本)中,使用值0注册highscore
if let hscore = defaults.valueForKey("highscore") {
highscore = hscore
highScoreResult.text = String(hscore)
}
然后在viewDidLoad
中只需编写
let defaultValues = ["highscore" : 0]
defaults.registerDefaults(defaultValues)
不需要可选绑定,因为用户默认值中的值始终是非可选的
要将highscore
保存回磁盘,请使用专用方法setInteger:forKey:
let highscore = defaults.integerForKey("highscore")
highScoreResult.text = String(highscore)
valueForKey:
是一种具有特殊意义的KVC方法,不应与NSUserDefaults
一起使用。在viewDidLoad中读取用户默认值时,您没有设置highscore
,因此每次加载视图控制器时它都将为零。谢谢,您能告诉我,我应该在viewDidLoad中添加什么?使用valueForKey设置或从用户默认值中获取值根本不是一个好方法,而是使用实际类型,如stringForKey、Boolforky、intForKey等。
defaults.setInteger(highscore, forKey: "highscore")