Swift 3, Xcode 8.1. Я хочу показать UIAlertController
в UIViewController
.iOS. Попытка представить UIAlertController на UIViewController, чей вид отсутствует в иерархии окон
У меня есть методы:
private static func rootViewController() -> UIViewController {
// cheating, I know
return UIApplication.shared.keyWindow!.rootViewController!
}
static func presentAlert(_ message: String) {
let alertView = UIAlertController(title: "RxExample", message: message, preferredStyle: .alert)
alertView.addAction(UIAlertAction(title: "OK", style: .cancel) { _ in })
rootViewController().present(alertView, animated: true, completion: nil)
}
Full code of this class you can find here
я называю метод presentAlert в viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
DefaultWireframe.presentAlert("test")
...
}
и получил предупреждение:
Внимание: В соблазн представить UIAlertController: 0x7f904ac0d930 на UIViewController: 0x7f904ad08040, чей вид не находится в иерархии окон!
Как избежать предупреждения и отображения предупреждения?
Он работает, когда я пытаюсь показать оповещение в исходном ViewController, но он не работает в другом ViewController, подключенном с помощью push segue с начальным VC.
Вы уверены, что 'rootViewController', на котором вы пытаетесь представить' UIAlertController', видимо и не покрывается другим модульным контроллером представления, например? – dive
Нажмите кнопку просмотра отладки (ее в панели над консолью отладки) на этом viewController. С левой стороны вы увидите весь стек представления с окном наверху. Вы можете щелкнуть правой кнопкой мыши по любому виду, чтобы распечатать описание. Сравните это с представлением rootViewController(); это должно быть так, чтобы показать, как ваше представление rootViewController больше не находится в иерархии. Выберите вид, который используется и использует его. –
Любое решение найдено? Столкнувшись с той же проблемой. –