如何加快我的请求以启用导航项目中的酒吧按钮项目?

问题描述:

在viewDidLoad中()第一的ViewController,有2个操作:如何加快我的请求以启用导航项目中的酒吧按钮项目?

  1. 提出buttonGo.isEnabled =假(buttonGo是栏按钮的项目)
  2. 发出请求时,通过web服务来检查设备被授权。

检查设备是否被授权是在单例类委托内完成的。它调用:获得委托方法的DownloadAuthorize:updateView()。

如果设备授权,我将回调委托方法的UpdateView()在视图控制器和该方法使得buttonGo.isEnabled =真

一切都运行良好,但buttonGo那张几秒钟后启用。我以这种方式进行调查,在我看来,buttonGo会被后台线程启用。我试图在委托方法中使用view.setNeedsLayout(),view.setNeedsDisplay(),因为我希望加快重绘组件的速度,但我得到类似这样的错误: “此应用程序正在从后台线程修改自动布局引擎之后从主线程访问引擎,这可能会导致引擎损坏和奇怪的崩溃“

是否有可能做一些事情来加快控件刷新?

谢谢

+0

请参考[this](https://stackoverflow.com/a/39712843/1746086)链接,检查约束是否更新。 – shahnilay86

这显然完成的,因为它是被修改自动版式UI元素的代码/从其是在后台线程或完成处理程序运行的代码约束。所有完成处理程序默认在后台线程中运行。您需要使用GCD从完成处理程序块更新UI元素。

DispatchQueue.main.async { // UI update/changes task here } 
+0

谢谢你的回答,但也许我错过了一些东西,或者我解释得很糟糕。按钮Go必须保持禁用状态,直到它收到授权。当授权是好的,那么按钮将启用。我知道,只有当方法委托updateView()被正确调用时,授权才是正确的。 – Ziggy

+0

@Ziggy那么你解决了你的问题? – Jaydeep

+0

谢谢,Jaydeep和Bhadresh。现在看来我解决了。在方法updateView()内部,我提出了你的建议,现在看起来工作得很好。感谢@Nilay,他向我展示了如何应用这一变化的正确方法 – Ziggy

在主线程中调用您的方法。

DispatchQueue.main.async { 
     updateView() 
} 
+0

谢谢你的回答,但也许我错过了一些东西,或者我解释得很糟糕。按钮Go必须保持禁用状态,直到它收到授权。当授权是好的,那么按钮将启用。我知道当方法委托updateView()被正确调用时,授权是很好的。 – Ziggy