Какой метод будет запущен в AppDelegate, когда мы нажимаем кнопку home и после использования какого-либо другого приложения возвращаемся обратно в это приложение

#ios #swift #iphone #swift3 #appdelegate

#iOS #swift #iPhone #swift3 #appdelegate

Вопрос:

Это мой первый вопрос о переполнении стека, так что потерпите.
Я создаю приложение с одним просмотром с помощью WKWebView . Которое просто загружает веб-приложение, используя url
Что я делаю и чего я хочу, я объяснил все ниже
Версия Xcode: 11.7
Версия iOS: 13.7
Вот Outlet в ViewController .

 @IBOutlet var webView: WKWebView!
  

Это webView загружается путем вызова следующей функции в viewDidLoad() .

 func loadMoma() {

    if let safeUrl = URL(string: url) {
        let request = URLRequest(url: safeUrl)
        webView.load(request)
    }
}
  

Вот мой viewDidLoad()

 override func viewDidLoad() {
    super.viewDidLoad()
    
    check = ConnectivityCheck.Connection()
    
    if check {
        loadMoma()
    }

}
    
  

Здесь ConnectivityCheck.Connection() возвращается значение true, если есть доступ к Интернету, и false, если его нет.
Вызывается использование этой проверки loadMoma() .
И если нет соединения, ничего не происходит amp; в viewDidAppear() методе, Alert вызывается функция, вот код для этого.

 override func viewDidAppear(_ animated: Bool) {
    if !check {
        self.Alert(Message: "Connection error!, please enable the Internet.")
    }
}
  

Определение Alert() метода :-

 func Alert (Message: String){
    
     let alert = UIAlertController(title: "No Connectivity.", message: Message, preferredStyle: .alert)
           
           let action = UIAlertAction(title: "Go to settings", style: .default) { (action) in
               
                if let settingsUrl = URL.init(string: UIApplication.openSettingsURLString), UIApplication.shared.canOpenURL(settingsUrl) {
                    UIApplication.shared.openURL(settingsUrl)
                }
               
           }
           
           
           alert.addAction(action)
           
           present(alert, animated: true, completion: nil)
    
}
  

Это вызывает оповещение и кнопку для перехода к настройкам iPhone для включения Интернета.
Вывод метода оповещения

Чего я хочу

Когда пользователь возвращается из настроек в приложение, в AppDelegate , loadMoma() должен вызываться метод.
Для этого я создал экземпляр ViewController в классе AppDelegate следующим образом :-

 var vc = ViewController()
  

Я loadMoma вошел applicationWillEnterForeground вот так:-

 func applicationWillEnterForeground(_ application: UIApplication) {
    print("applicationWillEnterForeground")
    if !flag {
        vc.loadMoma()
    }
}
  

Где flag то же самое, что и check .
Но дело в том, что даже печать не запускается, когда я нажимаю кнопку «Домой» или перехожу к настройкам во время запуска приложения.

Пожалуйста, дайте мне знать, куда я должен vc.loadMoma() вставить AppDelegate , чтобы получить функциональность, которую я описал выше.

Заранее спасибо

Комментарии:

1. applicationWillEnterForeground будет запущен, когда приложение находится в состоянии переднего плана. Получите текущий корневой контроллер представления из объекта window. вот так. защитите let yourvc = self.window? .RootViewController как? YourVC else { return } выполняет вашу перезагрузку.

Ответ №1:

Поскольку вы используете iOS версии 13.7 и Xcode версии 11.7, вам придется использовать методы жизненного цикла делегатов сцены, чтобы выполнить ваши требования.

Всякий раз, когда пользователь возвращается в ваше приложение из других приложений, методы sceneWillEnterForeground и sceneDidBecomeActive SceneDelegate будут запущены. Итак, вы можете поместить свой код для проверки подключения к Интернету и вызова метода loadMoma() внутри метода sceneWillEnterForeground.

#HappyCoding

Ответ №2:

Попробуйте поместить код, который вы хотите выполнить при открытии приложения, в applicationDidBecomeActive, и код, который вы хотите запустить при выходе, в applicationDidEnterBackground, в делегате приложения.