在我的应用中,我想设置UILabel
的文字。该文本来自JSON对象。我将UILabel
添加到我的故事板,设置IBOutlet
并调用我的异步方法来获取我的JSON对象。
在响应方法中,我设置了UILabel
的文本。但文本更改需要几秒钟。
当响应到来时,我将其打印到控制台。我可以看到,延迟不是来自异步方法。
响应来了,我可以在控制台中看到它。等待UIlabel
更改后的几秒钟。
我不明白这种行为,有没有立即刷新UIlabel
的技巧?
一些代码:
@IBOutlet weak var label_news: UILabel!;
override func viewDidLoad() {
super.viewDidLoad()
self.label_news.text = "CHANGE";
rcall.GetNews_GET_NewsResponse_0(self.NewsResponseHandler);
}
func NewsResponseHandler(resp:NewsResponse!){
self.label_news.text = resp.NewsText;
println(resp.NewsText);
}
很抱歉,如果这是一个初学者问题,swift和故事板对我来说都是全新的。
最好的问候
答案 0 :(得分:9)
与Rob在评论中所说的一样,所有UI更改都需要在主线程上完成。我还没有在Swift中实现它,但Objective-C和我假设的Swift在下面......
目标-C
dispatch_async(dispatch_get_main_queue(), ^{
self.label_news.text = resp.NewsText;
});
夫特:
dispatch_async(dispatch_get_main_queue()) {
self.label_news.text = resp.NewsText;
}
答案 1 :(得分:0)
c_rath的回答是正确的。在swift 3中,语法已经(再次)更改为
DispatchQueue.main.async {
self. label_news?.text = resp.NewsText
}