Nsuserdefaults 保存高分
Nsuserdefaults highscore saving
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()
}
}
当我按下 "tapPressed" 按钮时,得分++,然后它保存为高分,问题是当我重新启动应用程序时我已经保存了高分。当我按下 "tapPressed" 时,高分再次从零开始。
将 viewDidLoad 更改为:
override func viewDidLoad() {
super.viewDidLoad()
if let hscore = defaults.valueForKey("highscore") {
highscore = hscore
highScoreResult.text = String(hscore)
}
}
应用启动后,应该会从默认值加载高分。
在您的 viewDidLoad
中,您需要将声明更改为:
if let hscore = defaults.valueForKey("highscore") {
highscore = hscore
highScoreResult.text = String(hscore)
}
其他答案描述了错误的原因。此外,我还想描述如何正确使用 NSUserDefaults
。
推荐的方法是注册 key/value 对以获得可靠的默认值,以防首选项文件将被删除或应用程序首次启动。
在 AppDelegate(applicationDidFinishLaunching
或更早版本)中注册 highscore
,值为 0。
let defaultValues = ["highscore" : 0]
defaults.registerDefaults(defaultValues)
然后在viewDidLoad
中写
let highscore = defaults.integerForKey("highscore")
highScoreResult.text = String(highscore)
不需要可选绑定,因为用户默认值中的值始终是非可选的。
要将 highscore
保存回磁盘,请使用专用方法 setInteger:forKey:
defaults.setInteger(highscore, forKey: "highscore")
valueForKey:
是一种具有特殊含义的KVC方法,不应该与NSUserDefaults
.
一起使用
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()
}
}
当我按下 "tapPressed" 按钮时,得分++,然后它保存为高分,问题是当我重新启动应用程序时我已经保存了高分。当我按下 "tapPressed" 时,高分再次从零开始。
将 viewDidLoad 更改为:
override func viewDidLoad() {
super.viewDidLoad()
if let hscore = defaults.valueForKey("highscore") {
highscore = hscore
highScoreResult.text = String(hscore)
}
}
应用启动后,应该会从默认值加载高分。
在您的 viewDidLoad
中,您需要将声明更改为:
if let hscore = defaults.valueForKey("highscore") {
highscore = hscore
highScoreResult.text = String(hscore)
}
其他答案描述了错误的原因。此外,我还想描述如何正确使用 NSUserDefaults
。
推荐的方法是注册 key/value 对以获得可靠的默认值,以防首选项文件将被删除或应用程序首次启动。
在 AppDelegate(applicationDidFinishLaunching
或更早版本)中注册 highscore
,值为 0。
let defaultValues = ["highscore" : 0]
defaults.registerDefaults(defaultValues)
然后在viewDidLoad
中写
let highscore = defaults.integerForKey("highscore")
highScoreResult.text = String(highscore)
不需要可选绑定,因为用户默认值中的值始终是非可选的。
要将 highscore
保存回磁盘,请使用专用方法 setInteger:forKey:
defaults.setInteger(highscore, forKey: "highscore")
valueForKey:
是一种具有特殊含义的KVC方法,不应该与NSUserDefaults
.