我无法在闭包内更改UILabel的内容。我用谷歌搜索,但解决方案无处可寻。
以下是我的相关代码:
class ViewController: UIViewController {
@IBOutlet var city: UITextField!
@IBOutlet var message: UILabel!
@IBAction func buttonPressed(sender: AnyObject) {
var urlString = "http://google.com"
var url = NSURL(string: urlString)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!) {(data, response, error) in
self.message.text = "try"
println("done")
}
task.resume()
}
... //rest of the code
单击按钮时,应该使用“try”更改UILabel消息的内容。它在控制台中打印出“完成”,但它不会改变UILabel的内容。
答案 0 :(得分:0)
您可以在主线程上使用dispatch_async
进行更改。 UI更新必须在主线程中完成。 dataTaskWithURL
在后台线程中执行。
let task = session.dataTaskWithURL(url!) {(data, response, error) in
if (error == nil)
{
dispatch_async(dispatch_get_main_queue(),
{
self.label.text = "Updated"
})
}
}
答案 1 :(得分:0)
我只是遇到了同样的问题。我已经包好了
UILabel.text = newTitle
块中的DispatchQueue.main.async{}
,但无效。经过仔细检查,我发现我不小心在声明了UILabel的视图控制器外部声明了该函数。以为我会写这个,以防其他人遇到同样的问题!别忘了检查您的缩进:D