我在解析器出错时调用的方法中创建了一个警报。
警报正常,但在大约10秒后出现。 正如你在下面的方法中看到的那样,我立即出现了一个println(),大约10秒后显示警报。
我的代码:
func XMLParserError(parser: ParserData, error: String) {
println(error)
print("Error parser")
let alert = UIAlertView()
alert.title = "Error"
alert.message = "Parser error."
alert.addButtonWithTitle("OK")
alert.show()
}
答案 0 :(得分:3)
据我所知,所有与UI相关的事件都需要在主线程上。这看起来像XMLParserError
函数创建延迟来执行某些处理。
因此,您需要在此方法的主线程上显示警报。使用dispatch_async
dispatch_async(dispatch_get_main_queue(),{
alert.show()
});
修改:更多解释:
UI事件快速且响应迅速。这样用户就可以获得丰富的应用经验。因此,需要网络访问或一些复杂计算的冗长任务或事件需要在后台进行,因此如果您想在这种情况下编写代码,则必须在主线程中调用UI事件。
答案 1 :(得分:2)
确保您在主线程中展示UIAlertView
。
dispatch_async(dispatch_get_main_queue(), {
let alert = UIAlertView()
alert.title = "Error"
alert.message = "Parser error."
alert.addButtonWithTitle("OK")
alert.show()
}
所有UI活动应始终在主线程上执行,如果不这样做,则无法确定何时执行。这将导致您在问题中解释的行为。