Как запустить функцию всякий раз, когда приложение появляется на экране в Swift? - PullRequest
0 голосов
/ 20 января 2019

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

override func viewWillAppear() {
    generateRandomNumber()

}
override func viewDidAppear() {
    generateRandomNumber()
}
override func viewDidLoad() {
    generateRandomNumber()
}

Хотя функция запускается каждый раз, когда я запускаю приложение, но если после запуска приложения я нажимаю home botton и возвращаюсь к приложению (не завершил приложение), тогда функцияне выполняется снова.

Обновление: я пытался использовать следующий код в моем ViewController:

override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
    }
    @objc func applicationDidBecomeActive(notification: NSNotification) {
        generateRandomNumber()
    }

Но для запуска требуется около секунды.Есть ли лучший способ?

1 Ответ

0 голосов
/ 20 января 2019

В вашем делегате приложения вы хотите реализовать applicationDidBecomeActive.Обратите внимание, что это также будет работать, когда такие вещи, как системные оповещения будут отклонены.Если вы хотите что-то запустить только при возврате из фона, вам нужно applicationWillEnterForeground.Для получения полной информации см. «Управление изменениями состояния» в документации UIApplicationDelegate и Стратегии обработки изменений состояния приложения в Руководстве по программированию приложения.

Ваш подход выглядит в основном правильным;чтобы использовать willEnterForeground вместо didBecomeActive, это всего лишь небольшое изменение:

override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self,
                                           selector: #selector(applicationWillEnterForeground),
                                           name: UIApplication.willEnterForegroundNotification,
                                           object: nil)
}

@objc func applicationWillEnterForeground(notification: Notification) {
    generateRandomNumber()
}

Единственное, с чем следует быть осторожным, это то, что этот наблюдатель остается в силе до тех пор, пока представлениеКонтроллер существует, даже если в данный момент его нет на экране (наиболее распространенный случай, когда он представлен другими контроллерами представления).В некоторых случаях это проблема, и вам следует звонить addObserver в viewWillAppear и removeObserver в viewDidDisappear вместо использования viewDidLoad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...