无法解雇UIAlertController

时间:2016-03-27 06:14:23

标签: ios swift uialertview

如果没有互联网连接,我会弹出一个UIAlertController。当连接恢复时,我不知道如何正确地解除它。我每隔10秒就会检查一次,如果我这样做的话:

self.dismissViewControllerAnimated(true, completion: nil)

一旦警报视图被解除,这将在每个间隔关闭主视图。我试过了:

  let alert = UIAlertController(title: "No internet Connection", message: "Make sure your device is connected to the internet.", preferredStyle: UIAlertControllerStyle.Alert)

    if Reachability.isConnectedToNetwork() == true {
        print("Internet connection OK")

        alert.dismissViewControllerAnimated(true, completion: nil)

    } else {
        print("Internet connection FAILED")

        self.presentViewController(alert, animated: true, completion: nil)
    }

alert.dismissViewControllerAnimated(true, completion: nil)不起作用。 谢谢!

3 个答案:

答案 0 :(得分:1)

我认为,问题是多次出现 UIAlertController 并试图解雇UIAlertController的一个实例..所以你需要在呈现之前解除UIAlertController,如下所示

    $sql="SELECT * FROM products";
    extract($_POST);

    if(isset($size) && isset($price))
        $sql.=" WHERE size IN (".implode(',', $size).") OR price IN (".implode(',', $price).")"; 
    else if(isset($size)) 
        $sql.=" WHERE size IN (".implode(',', $size).")";

    else if(isset($price))

        $sql.=" WHERE (price IN (".implode(',', $price)."))";

    $all_row=$db->query($sql);

答案 1 :(得分:1)

这对我有用:谢谢@OS_Binod和@Pyro

        let alert = UIAlertController(title: "No internet Connection", message: "Make sure your device is connected to the internet.", preferredStyle: UIAlertControllerStyle.Alert)

    if Reachability.isConnectedToNetwork() == true {
        print("Internet connection OK")

        self.dismissViewControllerAnimated(false, completion: nil)

    } else {
        print("Internet connection FAILED")
        alert.dismissViewControllerAnimated(false, completion: nil)
        self.presentViewController(alert, animated: false, completion: nil)
    }

答案 2 :(得分:0)

我认为问题可能是您在显示警报之前试图解除警报

<强>更新 如果您想在互联网恢复后才解除警报,请在显示“UIAlertController”之后立即显示“UIAlertController”的引用。

在你的情况下,你试图解除新创建的对象的“警告”,这个对象甚至没有显示,所以你需要在互联网回来之前创建新的对象之前解雇旧的对象

此外,如果您每隔10秒调用该方法,则会在显示新警报之前解除旧警报以避免多重警报,否则您可以在警报已经显示的情况下制作标记,方法将不会每10秒再次检查,直到警报解除为止

更好的选择是: 检查互联网连接外部,如果没有互联网连接,那么只创建UIAlertController

更新1 您可以将警报作为全局变量并在您在else块中创建警报对象时存储警报对象,当互联网恢复时,您可以检查警报是否有对象,如果是,您可以解雇警报

 if Reachability.isConnectedToNetwork() == true {
        print("Internet connection OK")
        if alert != nil {
          alert.dismissViewControllerAnimated(true, completion: nil) 
        }
     //dismiss the alert using old refence from the alert
    //continue your normal code
    } else { 
       alert = UIAlertController(title: "No internet Connection", message: "Make sure your device is connected to the internet.", preferredStyle: UIAlertControllerStyle.Alert)
       //you may check and dismiss the previous alertcontroller before presenting the new one
       print("Internet connection FAILED")
       self.presentViewController(alert, animated: true, completion: nil)
    }