【问题标题】:Long delay in displaying screen swift 2.2swift 2.2显示屏幕延迟时间长
【发布时间】:2016-09-05 23:27:56
【问题描述】:

我的应用程序从 MySql 服务器读取数据并将其显示在表格视图中。在对服务器的调用开始时,应用程序使用具有浅灰色背景颜色的视图(名为“pdView”)覆盖 tableView。该视图是 tableView 也是场景的一部分(在 IB 中设计),但处于隐藏状态,直到调用服务器之前使用

    pdView.hidden = false

app获取数据并填充tableview后,使用

     dispatch_async(dispatch_get_main_queue(), { () -> Void in
         tableview.reloadData()
     })

可以看到tableView中显示的数据,灰色显示下。 然后我尝试使用隐藏视图

    pdView.hidden = true

但应用程序大约需要 44 秒才能使灰色消失。在此期间,我的应用程序运行正常,我可以上下滚动表格。

我尝试将代码隐藏在 dispatch_async() 中,但无济于事。

需要做些什么来解决这个问题,以便 pdView 在它回到隐藏状态后立即消失?

【问题讨论】:

  • 如果在调用reloadData()后立即隐藏它会怎样?
  • 我也试过了 - 没有帮助
  • 我想知道为什么有人在没有解释的情况下否决了这个问题。
  • 我试图在一个小的普通应用程序上复制这个问题。我发现,如果我尝试在 dispatch_sync() 中执行 'pdView.hidden = true',我确实会收到延迟,但调试窗口中还会出现一条错误消息:“此应用程序正在修改自动布局引擎一个后台线程,这可能导致引擎损坏和奇怪的崩溃。这将在未来的版本中导致异常。”。但在我的应用程序中,我没有收到此消息,这意味着我在 dispatch_sync() 函数中执行此操作。

标签: ios uitableview hidden


【解决方案1】:

ALL您的 UI 代码需要来自主线程。这包括更改视图的hidden 标志的状态。

您是否在调用中包含了该代码

dispatch_async(dispatch_get_main_queue() 

还有吗?

【讨论】:

  • 是的,正如我在描述中提到的那样
  • 您的描述未提供有关您执行 pdView.hidden = falsepdView.hidden = true 语句的上下文的任何信息。您需要编辑问题以提供方法的完整代码以及更多上下文。
【解决方案2】:

听起来您正在尝试从单独的线程更新 UI。您需要为您的pdView.hidden = true 提供一些背景信息。你可以试试

dispatch_async(dispatch_get_main_queue(), { () -> Void in
    tableview.reloadData()
    self.pdView.hidden = true
})

注意self.pdView.hidden..中的self

希望对您有所帮助。

【讨论】:

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