如何在闭包内更改UILabel的内容

时间:2015-01-13 08:58:26

标签: ios swift uilabel closures

我无法在闭包内更改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的内容。

2 个答案:

答案 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