我在使用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
的值,如果不是n,则将值解包并添加到totalSeconds
。
不幸的是,似乎没有存储/访问该值,因为每当我重新启动应用程序时,它的值都为0.无论是那还是没有显示。
真的很抱歉这个问题太久了,谢谢!
答案 0 :(得分:0)
有方法userDefaults.setInteger
和.integerForKey
。尝试使用那些而不是对象。