2015-01-13 47 views
0

我無法更改封閉內部的UILabel的內容。我GOOGLE了,但解決方案無處可尋。如何更改封閉內部的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 

應該改變與「嘗試」當我點擊按鈕的UILabel消息的內容。它在控制檯中打印出「完成」,但不會更改UILabel的內容。

回答

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" 
     }) 
    } 
} 
+0

我改變了你提出的方式,它工作。之後,我在dispatch_async方法之後添加了self.message.text =「try」,現在它也可以工作。當我刪除dispatch_async方法時,它不起作用。 –

+0

這是解決此問題的合法方法,或者這只是一種解決方法?我的問題的主要原因是什麼? –

+0

這是解決問題的方法。它不是一種解決方法。您必須在主線程上執行UI更新。 – rakeshbs