Nsuserdefaults得分高分

时间:2015-12-13 07:19:04

标签: swift 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”时,高分再次从零开始。

3 个答案:

答案 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:一起使用。