尝试在<test.viewcontroller:0x7c87a990 =“”>上显示<uialertcontroller:0x7d92f000 =“”>,其视图不在窗口层次结构中

时间:2016-01-31 05:37:23

标签: swift uialertcontroller

我的ViewController中有一个快速if语句,用于检查互联网连接是否可用。如果没问题,但是当互联网未连接时,我收到此错误:

  

尝试在窗口层次结构中显示其视图!

我曾经有过UIAlertView,但Xcode告诉我它已被弃用,所以我需要将它更改为UIAlertController。执行此操作后,这是发生错误的时间。

这是If语句:

let alert = UIAlertController(title: "This can't be true", message:"This app needs internet, but you don't have it, please connect", preferredStyle: .Alert)

override func viewDidLoad() {
    super.viewDidLoad()

    // Check for internet Connection
    if Reachability.isConnectedToNetwork() == true {
        print("Internet connection OK")
    } else {
        print("Internet connection FAILED")


        alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in })
        self.presentViewController(alert, animated: true){}
    }
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:6)

好的,快速而又脏的方式,不确定这是否正确,Stack Overflow请评论并帮助进一步讨论。

的原因

  

您的项目正在创建一个带有透明UIViewController的UIWindow,然后在其上呈现UIAlertController。但是视图尚未完成加载,因此无法找到它。

(我认为:S)

解决方案

将它放在viewDidLoad()中:

if Reachability.isConnectedToNetwork() == true {
    print("Internet connection OK")
    // do something
}

然后,将其写出viewDidLoad()的范围:

override func viewDidAppear(animated: Bool) {
    if Reachability.isConnectedToNetwork() == false {
        print("Internet connection FAILED")
        alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in })
        self.presentViewController(alert, animated: true){}
    }
}

不推荐用于需要加载很多的视图,因为警报可能需要一段时间才能显示。

如果有效,请告诉我,让我知道您的解决方案。