在下面的代码中,在func setTimer(timer:Timer)中,我将timer.timeLabel分配给timerLabel.text。当我运行该代码时,它给我一个错误,说“线程1:致命错误:在展开一个Optional值时意外地发现nil”。我确定它不是在引用timer.timerlabel,因为我可以运行print(timer.timerlabel)并输出字符串。因此,该值不为零。
当我尝试手动设置timerLabel.text =“”时,在该行上出现了相同的错误。这意味着警告与我分配给的变量有关,而不与我分配给的变量有关。
其他标签也发生了同样的事情(hoursLabel.text = time.hours等)
问题:为什么我要分配的值为nil怎么办?考虑到我在tableViewCell中使用了类似的代码并且工作正常,这可能是什么导致的?我试图重建viewController并重新连接所有IBOutlet。我已经清理了项目,但仍然没有运气。
import UIKit
class TimerControlVC: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var hoursLabel: UILabel!
@IBOutlet weak var minutesLabel: UILabel!
@IBOutlet weak var secondsLabel: UILabel!
let tf = TimeFormatter()
func setTimer(timer: Timer){
print(timer.timerLabel)
timerLabel.text = timer.timerLabel
let time = tf.formatOutput(seconds: timer.time)
hoursLabel.text = time.hours
minutesLabel.text = time.minutes
secondsLabel.text = time.seconds
}
}
答案 0 :(得分:1)
timerLabel
可能是nil
,并且尝试访问它(隐式强制展开,因为它是一个隐式展开的可选内容)以获取其text
导致崩溃。
很可能您的@IBOutlet
没有正确连接。
答案 1 :(得分:0)
问题可能出在调用setTimer函数的地方。 尝试在TimeControlVC的viewDidLoad中运行它,看看会发生什么。
在推送或展示视图控制器之前,不应调用它(setTimer函数),因为尚未设置视图,因此由于抛出nil错误而导致崩溃,因为他们找不到要分配给的视图
答案 2 :(得分:0)
可能是某些原因
timerLabel未连接到情节提要中的任何标签。检查一下。
有时Xcode看不到情节提要中的更改。清理项目,然后重新构建。
在创建所有视图之前调用此方法。例如,如果您从init()
函数调用它。您应该在viewDidLoad()
中配置UI。
检查您的viewDidLoad()
和其他替代功能。也许您忘记添加超级通话。
添加更多代码。您如何创建此控制器。您如何称呼此功能?