Как обновить пользовательский интерфейс из фонового состояния - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь создать приложение для таймера.У меня есть одноэлементный класс с таймером, который срабатывает каждые х минут.Используя пользовательский делегат, я передаю данные активному контроллеру представления и обновляю значение в метке.Если данные соответствуют числу y, я выполняю push и обновляю счет в метке контроллера другого представления.

Когда приложение находится на переднем плане, у меня не было никаких проблем.Если приложение находится в фоновом состоянии, счетчик продолжает работать, текст метки не обновляется, а push не выполняется.Тем не менее я в первом взгляде контроллера.Как это решить?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

, как я упоминал в вашем разделе комментариев. когда ваше приложение находится в фоновом состоянии, вы не должны постоянно обновлять свой интерфейс, так как это бессмысленно. когда пользователь снова нажмет на ваше приложение, ваш контроллер представления вызовет функцию 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()
    }
}
0 голосов
/ 21 мая 2019

Вам нужно обернуть все задачи пользовательского интерфейса переднего плана в блок, подобный этому

DispatchQueue.main.async {
   // do your UI stuff here, like
   // label.text = "Main thread stuff"
}

Поместите это в действие таймера.

...