记住swift中2个ViewControllers的高分

时间:2015-08-08 09:32:53

标签: iphone swift nsuserdefaults viewcontroller

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

First 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()但在视图控制器的类之外。

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

3 个答案:

答案 0 :(得分:1)

首先检查NSUserDefault的{​​{1}}是否已设置。如果未设置,则初始化oldScore,否则不要。只需获取oldScore的值并将其与新分数进行比较并相应地设置值

oldScore

在第二个视图控制器中,首先将if (NSUserDefaults.standardUserDefaults().objectForKey(oldScore) == nil) { oldScore = Int() } 的值放入变量中,然后检查它是否等于NSUserDefault's oldScore。如果它只是这样设置:

Score

答案 1 :(得分:0)

在第一个视图控制器中进行以下更改。

id              fname             lname              profile_pic
1               barrack           obama              1.jpg
5               dummy1            dummy1             5.jpg
6               dummy4            dummy4             6.jpg

根据highScore的变量类型,可能需要进行一些更改。 希望这可能会有所帮助。

答案 2 :(得分:0)

根据Apple的文档,您应该在使用之前注册所有默认值。

  • application:didFinishLaunchingWithOptions:的AppDelegate中添加此代码以注册密钥oldScore以获得可靠的默认值。还为所提到的“切换”按钮注册了密钥switchState

    let defaults = NSUserDefaults.standardUserDefaults()
    let defaultValues = ["oldScore" : 0, "switchState" : "ON"]
    defaults.registerDefaults(defaultValues)
    
  • 在第一个视图控制器中检索高分值。如果没有将值写入磁盘,则会获取已注册的默认值(0)。您可以分别读取“切换”按钮的值。

    let defaults = NSUserDefaults.standardUserDefaults()
    let oldScore = defaults.integerForKey("oldScore")
    let buttonState = defaults.stringForKey("switchState")
    highScore.text = "\(oldScore)"
    
  • 在第二个视图控制器中保存高分(如果已更改)

    let defaults = NSUserDefaults.standardUserDefaults()
    let oldScore = defaults.integerForKey("oldScore")
    if score > oldScore {
      defaults.setInteger(score, forKey: "oldScore")
      defaults.synchronize()
      oldScore = score
    }