有2个ViewController,第一个是用户获得积分和高分标签。
在第二个ViewController中,代码将计算用户是否打破了旧的高分(如果是)-当然会发生变化。但!当我退出应用程序并再次开始播放时,高分标签会显示我的最后分数,而不是最高分。
这是我的代码:

第一个ViewController:

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()

defaults.synchronize()
highScore.text = String(stringInterpolationSegment: oldScore)


第二个ViewController:

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
if score > oldScore {
    defaults.setInteger(score, forKey: "oldScore")
    defaults.synchronize()
    var money = defaults.valueForKey("oldScore") as! Int
    oldScore = money
} else {
    defaults.setInteger(oldScore, forKey: "oldScore")
    defaults.synchronize()
    var money = defaults.valueForKey("oldScore") as! Int
    oldScore = money
}


我在视图控制器代码中也获得了var oldScore = Int(),但在视图控制器的类之外。

此外,我还有一个“开关”按钮,其状态为“开”。但是有时我/用户想要将其更改为关闭,在退出应用程序并重新启动后如何保存它作为用户的选择?

最佳答案

首先检查是否为NSUserDefault设置了oldScore。如果未设置,则初始化oldScore,否则不初始化。只需获取oldScore的值,并将其与新分数进行比较,然后相应地设置该值

if (NSUserDefaults.standardUserDefaults().objectForKey(oldScore) == nil) {
    oldScore = Int()
}


在您的Second View Controller中,首先将NSUserDefault's oldScore的值放入变量,然后检查其是否等于Score。如果只有它,则像这样设置:

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var oldScoreCheck = defaults.valueForKey("oldScore") as! Int
if score > oldScoreCheck {
   defaults.setInteger(score, forKey: "oldScore")
    defaults.synchronize()
}

关于iphone - swift 记住2个ViewController中的高分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31891690/

10-12 13:37