所以我最近开始使用 Swift ,基本上我有一个UILabel
用于显示错误消息。这个标签是隐藏的(通过故事板的隐藏复选标记,我尝试将其设置为隐藏在viewDidLoad中)。
当用户点击登录时,apicontroller类会发布到后端服务器以检查凭据。 apicontroller有一个委托,在completionHandler
的{{1}}中调用。 viewcontroller中的协议方法检查以查看http状态,如果它是200,则它将移动到下一个视图。但是,如果它不是200,则视图控制器将取消隐藏错误标签
(NSURLSession.dataTaskWithRequest)
这是我的问题:
当erorrlabel应该被取消隐藏时,我将它的隐藏属性设置为false,println(“应该立即取消隐藏”)并显示警告。 alert和print语句立即执行。但是,标签在显示之前需要几秒钟。
我已经在模拟器中的4s,5,5s和6上尝试了这个并且实际的5s,我仍然遇到这个问题。我还尝试使用(self.errorLabel.hidden = false and self.erorLabel.text = "ERROR MESSAGE HERE").
手动刷新视图,但仍然无效。
有什么想法吗?
答案 0 :(得分:1)
您可能正在更新不是主线程的线程中的标签。
将代码包含在此块中:
dispatch_async(dispatch_get_main_queue()) {
// Update the label here
}
答案 1 :(得分:0)
感谢Antonio向我推荐这个问题。这确实解决了我在这里问到的问题:https://stackoverflow.com/questions/26800093/setting-iboutlet-in-closure-result-in-swift
这是对我有用的最后一段代码:
homeModel.GetHomeData({(textResult:String!) in
dispatch_async(dispatch_get_main_queue())
{
// Update the textview in the ui here
self.homeTextView.text = textResult
}
});