如何在计时器工作时设置NSTextField的值?

问题描述 投票:0回答:2

我想制作一个计时器,并且有一些功能可以在计时器工作时设置计时器标签(精确为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,同时隐式展开一个可选值

哦,请帮助我!

swift macos textfield nstextfield appkit
2个回答
0
投票

如果timeDisplay()是由viewDidLoad()触发的,或者只是单击按钮,它就完美地工作了!

因为视图已正确加载,并在主线程中设置了值。

由于计时器在后台线程中工作,因此计时器无法正确设置该值。最好您尝试使用此方法在“主线程”中设置值

NSTextField

希望这会有所帮助。


0
投票

要更新TextField文本,您必须每秒手动更改文本。您可以使用计时器安排此触发。查看以下代码。我测试过了您必须使用主线程来更新显示值。

© www.soinside.com 2019 - 2024. All rights reserved.