我想制作一个计时器,并且有一些功能可以在计时器工作时设置计时器标签(精确为NSTextField
)。但这不起作用!
首先,我实现了一个显示时间的功能。
func timeDisplay() {
print("isTimerStart: \(TimerController.isTimerStart)")
let timerSecond = TimerController.secondDuration
self.minuteTextField.stringValue = String(format: "%02d", (timerSecond / 60))
print("minuteTextField: \(String(self.minuteTextField.integerValue))")
self.secondTextFieled.stringValue = ": \(String(format: "%02d", TimerController.secondDuration % 60))"
print("secondTextField: \(String(self.secondTextFieled.stringValue))")
}
我在timeDisplay()
处添加viewDidLoad()
以测试该功能。
如果timeDisplay()
是由viewDidLoad()
触发或只是单击按钮,则可以正常工作!
但是如果我启动计时器并且timeDisplay()
由@objc
功能触发,则无法显示minuteTextField
(或secondTextField
)为可选值的错误,因此我无法将值设置为[C0 ],而定时器可以打开,而我可以通过按钮设置值:/
线程1:致命错误:意外地发现nil,同时隐式展开一个可选值
哦,请帮助我!
如果timeDisplay()是由viewDidLoad()触发的,或者只是单击按钮,它就完美地工作了!
因为视图已正确加载,并在主线程中设置了值。
由于计时器在后台线程中工作,因此计时器无法正确设置该值。最好您尝试使用此方法在“主线程”中设置值
NSTextField
希望这会有所帮助。
要更新TextField文本,您必须每秒手动更改文本。您可以使用计时器安排此触发。查看以下代码。我测试过了您必须使用主线程来更新显示值。