我需要能够将用户从应用程序中的任何位置重定向到AuthorizationController
。为此,我得到了顶部控制器,并从中显示AuthorizationController
,但是如果此控制器等于UIAlertController
(可能还有其他控制器),则会出现以下错误:
警告:尝试在视图不在窗口层次结构中的“ UIAlertController:0x7f9cd1031000”上显示“ AuthorizationController:0x7f9cd07fa3a0”!
我的代码:
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
不是nil并再次出错。