Этот контроллер предупреждений инициализирован:
let alertVC2 = PMAlertController(title: "Need to always enable location authorization", description: "Go to Settings -> App -> Location. Then select 'Always'.", image: UIImage(named: "Location"), style: .alert)
Внутри ViewDidLoad()
действие добавляется к alertVC2
.
alertVC2.addAction(PMAlertAction(title: "OK", style: .default, action: { () in
print("Capture action OK")
self.alertVC2.dismiss(animated: true, completion: nil)
}))
alertVC2.addTextField { (textField) in
textField?.placeholder = "Location..."
}
Кроме того, внутри viewDidLoad()
он добавлен с этим фрагментом кода, который позволит мне запускать функцию willResignActive, когда приложение снова станет активным, оставаясь в бездействующем фоне:
NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: UIApplication.didBecomeActiveNotification, object: nil)
Эта функция запускается, когда приложение снова становится активным:
@objc func willResignActive(_ notification: Notification) {
print("activated")
check()
}
Внутри функции check()
будет вызван alertVC2
(AlertController) и контроллер оповещений.будет показано на экране.Когда я возвращаю приложение к жизни, возвращая его к действию, отображается alertcontroller.Когда я выйду из приложения во второй раз и вернусь снова, оно не будет отображать alertVC2
.Когда я делаю это в третий раз, приложение вылетает.
Вот краткий обзор функции check()
:
func check() {
if CLLocationManager.authorizationStatus() == .notDetermined || CLLocationManager.authorizationStatus() == .authorizedWhenInUse || CLLocationManager.authorizationStatus() == .denied || CLLocationManager.authorizationStatus() == .restricted {
locationManager.requestWhenInUseAuthorization()
locationManager.requestAlwaysAuthorization()
if CLLocationManager.authorizationStatus() != .authorizedAlways {
print("Need to always authorize location for me")
self.present(alertVC2, animated: true, completion: nil)
}
}
if CLLocationManager.authorizationStatus() == .authorizedAlways {
locationManager.startUpdatingLocation()
}
}
Это сообщение об ошибке, которое я получаю, когда приложение падает в третьемпопытка:
Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Приложение попыталось представить модально активный контроллер
Что мне нужно сделать, чтобы он не использовалсявылетает и продолжает публиковать alertcontroller?