Swift:UIAlertController没有在dispatch_async中显示

时间:2016-06-06 07:15:01

标签: swift uialertcontroller

我有一个设置,我使用UIAlertController来显示任务的进度,直到任务有一些状态返回。

代码看起来像这样

class AlertVCDemo: UIViewController {
    let alertVC = UIAlertController(title: "Search",
                                message: "Searching....", preferredStyle: 
                                UIAlertControllerStyle.Alert)

    override func viewDidLoad() {
        super.viewDidLoad()
        alertVC.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { action in
            switch action.style{
            case .Default:
                print("default")

            case .Cancel:
                print("cancel")

            case .Destructive:
                print("destructive")
            }
        }))
    }

    func showAlertVC() {
        dispatch_async(dispatch_get_main_queue(), {
            self.presentViewController(self.alertVC, animated: true, completion: nil)
        })
    }

    @IBAction func searchButtonClicked(sender: AnyObject) {
        showAlertVC()
        // Now do the real search that will take a while,
        // depending on the result change the message of the alert VC
    }
}

不知怎的,我发现主线程中没有显示警报视图控制器。搜索逻辑最终完成。我使用的是iOS 9.3。在提出这个问题之前我做了彻底的研究,并且在类似线程上提出的解决方案都没有帮助不确定为什么dispatch_async在搜索仍然发生时不会显示警报VC。

即使我没有在方法中使用dispatch_async,事情也不会改变。

2 个答案:

答案 0 :(得分:1)

presentViewController
在主线程中调用

。所以我想你的搜索代码"阻止UI线程。 试试这样的事情

@IBAction func searchButtonClicked(sender: AnyObject) {
    showAlertVC()
    // Now do the real search that will take a while,
    // depending on the result change the message of the alert VC
}

答案 1 :(得分:0)

检查UIViewController的{​​{1}}属性。它应该是零。如果不是nil,则presentedViewController方法不起作用。