使用NSUSerDefaults存储永久数据的问题

时间:2015-02-12 10:43:01

标签: swift nsuserdefaults

我在使用NSUSerDefaults存储永久数据方面遇到困难,基本上我有一个应用程序,它有两个全局变量countSecondstotalSeconds,两者都是int类型。计时器增加countSecondstotalSeconds应该是有史以来记录的总时间(我希望这是永久存储) 还有两个视图控制器,一个是计时器,代码如下:

@IBAction func addTimeButton(sender: AnyObject) {

    totalSeconds += countSeconds
    timer.invalidate()
    countSeconds = 0
    timerDisplay.text = ("00:00")

    if ahoyCaptin > 0 {
        ahoyCaptin--
    }
}

这基本上会停止计时器并将计时器值countSeconds设置为0. ahoyCapti代码只是为了防止多个计时器一次运行,因此与此问题无关。

另一个视图控制器显示长期数据(我想用永久存储器存储的东西(totalSeconds))它有代码:

override func viewDidAppear(animated: Bool){

    var timerDisplayyo = display(time: totalSeconds, label: totalTime, prefix: "Total: ")

    let savedData = countSeconds
    userDefaults.setObject(countSeconds, forKey: "key")
    userDefaults.synchronize()

}

override func viewDidLoad() {
    super.viewDidLoad()

    var yarr: Int? = userDefaults.objectForKey("key") as Int?
    if yarr == nil {
        totalSeconds = 0
    }
    else {
        totalSeconds += yarr!
    }

}

timerDisplayyo是一个以漂亮的格式显示时间的函数,并采用totalSeconds的参数。据我所知,第一个代码段创建了一个常量,该常量存储countSeconds(我想永久存储的变量)的值,该值经常通过同步更新。

第二个代码段创建一个名为yarr的变量,它是一个可选的Int,它等于存储的值。如果可选项为nil(即值未存储?)totalSeconds = 0的值,如果不是n,则将值解包并添加到totalSeconds

不幸的是,似乎没有存储/访问该值,因为每当我重新启动应用程序时,它的值都为0.无论是那还是没有显示。

真的很抱歉这个问题太久了,谢谢!

1 个答案:

答案 0 :(得分:0)

有方法userDefaults.setInteger.integerForKey。尝试使用那些而不是对象。