【问题标题】:Issues using NSUSerDefaults to store permanent data使用 NSUSerDefaults 存储永久数据的问题
【发布时间】:2015-02-12 10:43:00
【问题描述】:

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

@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 的值,如果不是 nil,则将值解包并添加到 totalSeconds

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

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

【问题讨论】:

  • 在这一行userDefaults.setObject(countSeconds, forKey: "key"),您将countSeconds 存储为密钥。应该是totalSeconds

标签: swift nsuserdefaults


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2016-04-29
    相关资源
    最近更新 更多