为什么我的警报不在视图层次结构中

时间:2019-02-15 07:46:02

标签: ios swift hierarchy uialertcontroller

我发现我的控制器不在这段代码的视图层次结构中,我在viewDidLoad中称呼它:

if CLLocationManager.locationServicesEnabled() {
    // code
} else {
    let alertController = UIAlertController(...)
    //
    present(alertController)
}

如果在主队列中将else子句包装在.async或.asyncAfter中,我的问题就会消失。 为什么会在这里发生?

谢谢!

1 个答案:

答案 0 :(得分:1)

根据您的问题,您尝试在加载UIviewcontroller层次结构之前先加载UIAlertController,在这里您可以通过两种方式做到这一点

  • 您可以在主线程中强制加载UIAlertController,因此在这里您需要使用.async或.asyncAfter,但不建议使用
  • 替代建议,但它可以正常工作,您需要等待初始的UI视图层次结构,这意味着您需要将代码从viewDidLoad转换为viewDidAppear。供参考:Difference between viewDidLoad and viewDidAppear