【发布时间】:2015-02-12 10:43:00
【问题描述】:
我在使用NSUSerDefaults 存储永久数据时遇到了困难,基本上我有一个应用程序,它有两个全局变量countSeconds 和totalSeconds,它们都是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