Мне нужно иметь возможность перенаправлять пользователей на AuthorizationController
из любой точки приложения.Для этого я получаю верхний контроллер и представляю AuthorizationController
от него, но если этот контроллер равен UIAlertController
(и, возможно, некоторым другим), то я получаю следующую ошибку:
Предупреждение: Попытайтесь представить «AuthorizationController: 0x7f9cd07fa3a0» на «UIAlertController: 0x7f9cd1031000», чье представление не находится в иерархии окон!
Мой код:
if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "authorizationController") as? AuthorizationController {
if let window = window, let rootViewController = window.rootViewController {
var currentController = rootViewController
while let presentedController = currentController.presentedViewController {
currentController = presentedController
}
if currentController as? AuthorizationController == nil {
currentController.present(controller, animated: false, completion: nil)
}
}
}
Теоретически, я могу избежать этой проблемы, добавив !(PresentedController is UIAlertController)
к while
, но это будет очень грубо.
Могу ли я проверить, находится ли текущий контроллер в иерархии представлений или получить верхний контроллер в иерархии окон?
В другом потоке коллега предлагает проверитьViewController.view.window! = nil
, но в моем случае это не работает.Я всегда понимаю, что presentedController
не равно нулю, и снова получаю ошибку.