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”时,高分再次从零开始。
答案 0 :(得分:0)
将viewDidLoad更改为:
override func viewDidLoad() {
super.viewDidLoad()
if let hscore = defaults.valueForKey("highscore") {
highscore = hscore
highScoreResult.text = String(hscore)
}
}
一旦你启动应用程序,它应该从默认值中加载高分。
答案 1 :(得分:0)
在viewDidLoad
中,您需要将声明更改为:
if let hscore = defaults.valueForKey("highscore") {
highscore = hscore
highScoreResult.text = String(hscore)
}
答案 2 :(得分:0)
其他答案描述了错误的原因。此外,我还要描述正确使用int[] sorted = {10,67,68,28};
int[] sortedOriginal = sorted.clone();
Arrays.sort(sorted);
System.out.println(Arrays.asList(sorted).indexOf(sortedOriginal[0]));
。
建议的方法是注册键/值对以获得可靠的默认值,以防首选项文件被删除或应用程序第一次启动。
在AppDelegate(NSUserDefaults
或更早版本)注册applicationDidFinishLaunching
,其值为0.
highscore
然后在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")
是一种具有特殊含义的KVC方法,不应与valueForKey:
一起使用。