我正在尝试创建一个计时器应用。我有一个带有计时器的单例课程,该计时器每x分钟触发一次。使用自定义委托,我将数据传递给活动视图控制器,并更新标签中的值。如果数据是在计数为y时,我将执行推并在另一个视图控制器的标签中更新计数。
当应用程序处于前台时,我没有任何问题。如果应用程序处于后台状态,则计数器将继续运行,并且标签文本不会更新,也不会执行推送。我仍然在第一个视图控制器中。该如何解决?
答案 0 :(得分:-1)
您需要将所有前台UI任务包装在这样的块中
DispatchQueue.main.async {
// do your UI stuff here, like
// label.text = "Main thread stuff"
}
将其放入您的计时器操作中。
答案 1 :(得分:-1)
就像我在您的评论部分中提到的那样。当应用处于后台状态时,您不应该不断更新UI,因为它毫无意义。当用户点按回您的应用程序时,您的视图控制器将调用函数viewDidAppear(animated)
。在该功能中,您可以检查计时器条件,然后根据需要显示第二个视图控制器。我将在下面发布示例代码
class FirstViewController : UIViewController {
var timerExpiration = false
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if timerExpiration {
let vc = SecondViewController()
present(vc, animated: true, completion: nil)
}
}
}
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}