【发布时间】:2016-01-01 03:22:06
【问题描述】:
我正在使用 Swift 制作一个小费计算器应用程序。我的目标是在 10 分钟后重置我的应用程序(换句话说,将我的所有标签设置为 0.00 美元,并将默认值设置回 NSUserDefaults)。
我将这 3 个函数放在我的 ViewController.swift 文件中:
func compareTimes(opens: NSDate?, closes: NSDate?) {
if(opens!.timeIntervalSinceReferenceDate-closes!.timeIntervalSinceReferenceDate>600) {
reset()
}
}
func openApp() {
openingTime = NSDate()
let defaults = NSUserDefaults.standardUserDefaults()
closingTime = defaults.objectForKey(closeKey) as! NSDate?
if (closingTime != nil) {
compareTimes(openingTime, closes: closingTime)
}
}
func closeApp() {
closingTime = NSDate()
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(closingTime, forKey: closeKey)
}
在我的 AppDelegate 中,我调用了以下两个方法:
func applicationDidEnterBackground(application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
ViewController().closeApp()
}
func applicationWillEnterForeground(application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
ViewController().openApp()
}
请注意,应用关闭时会记录时间,应用打开时也会记录时间。比较这些时间,如果 10 分钟过去,则调用 reset()。
我的问题是当 reset() 被调用时,我所有代表 UILabel 和 UITextFields 的变量都变为 nil 并且出现错误
致命错误:在展开 Optional 值时意外发现 nil。
这是我的reset()方法供参考:
func reset() {
billField.text=""
tipLabel.text = "+ "+formatter.stringFromNumber(0)!
totalLabel.text = formatter.stringFromNumber(0)
total2.text = formatter.stringFromNumber(0)
total3.text = formatter.stringFromNumber(0)
total4.text = formatter.stringFromNumber(0)
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("15", forKey: key1)
defaults.setObject("18", forKey: key2)
defaults.setObject("20", forKey: key3)
defaults.synchronize()
percentages.append(0.1)
percentages.append(0.1)
percentages.append(0.1)
percentButton.setTitle("15%", forSegmentAtIndex: 0)
percentButton.setTitle("18%", forSegmentAtIndex: 1)
percentButton.setTitle("20%", forSegmentAtIndex: 2)
}
【问题讨论】:
标签: ios swift time appdelegate