Проверьте, находится ли контроллер в иерархии окон - PullRequest
0 голосов
/ 02 июля 2019

Мне нужно иметь возможность перенаправлять пользователей на 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 не равно нулю, и снова получаю ошибку.

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