我有一个设置,我使用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,事情也不会改变。
答案 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
方法不起作用。