【问题标题】:Alert does not appear immediately iOS警报不会立即出现 iOS
【发布时间】:2015-02-18 18:30:19
【问题描述】:

我在解析器出错时调用的方法中创建了一个警报。

警报正常工作,但大约 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()
}

【问题讨论】:

  • 这是一个简单的线程问题。您应该在主线程上调用 show。

标签: ios swift alert


【解决方案1】:

据我所知,所有与 UI 相关的事件都需要在主线程上。这里看起来像XMLParserError函数创建延迟来执行一些处理。

所以你需要在这个方法的主线程上显示警报。使用dispatch_async

dispatch_async(dispatch_get_main_queue(),{
       alert.show()
});

编辑:更多解释:

UI 事件快速且响应迅速。使用户获得丰富的应用体验。因此需要网络访问或一些复杂计算的冗长任务或事件需要在后台进行,因此如果您想在这种情况下编写代码,则必须在主线程中调用 UI 事件。

【讨论】:

  • UI 事件快速且响应迅速。使用户获得丰富的应用体验。因此需要网络访问或一些复杂计算的冗长任务或事件需要在后台进行,因此如果您想在这种情况下编写代码,则必须在主线程中调用 UI 事件。
【解决方案2】:

确保您在主线程中显示UIAlertView

   dispatch_async(dispatch_get_main_queue(), {
      let alert = UIAlertView()
      alert.title = "Error"
      alert.message = "Parser error."
      alert.addButtonWithTitle("OK")
      alert.show()
   }

所有 UI 活动都应始终在主线程上执行,否则您无法确定何时执行。这将导致您在问题中解释的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2023-03-30
    相关资源
    最近更新 更多