Swift xcode 6 label.text在NSURLSession中没有变化

Max*_*sen 2 uilabel ios nsurlsession swift

这是一个简单的测试应用程序,用于演示如何从Web提取数据.其中有一个NSURLSession由按钮动作触发.

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var city: UITextField!
@IBOutlet weak var message: UILabel!

@IBAction func buttonPressed(sender: AnyObject) {
    var urlString = "http://www.weather-forecast.com/locations/" + city.text.stringByReplacingOccurrencesOfString(" ", withString: "") + "/forecasts/latest"
    var url = NSURL(string: urlString)

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in

        var urlContent = (NSString(data: data, encoding: NSUTF8StringEncoding))
        var contentArray = urlContent!.componentsSeparatedByString("<span class=\"phrase\">")
        var newContentArray = contentArray[1].componentsSeparatedByString("</span>")
        var messageContent = newContentArray[0] as String

        println(messageContent)
        self.message.text = messageContent
    }
    task.resume()
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}
Run Code Online (Sandbox Code Playgroud)

问题是标签"message"不会改变为"messageContent"变量.当我println(messageContent)在控制台中完美地显示数据但GUI标签保持不变.

如果您放置self.message.text = "it worked"在NSURLSession之外,则标签会更改.

在我看来,问题发生在NSURLSession无法改变的地方label.text

有人可以帮忙吗?

blu*_*ome 7

NSURLSession的完成闭包在子线程中调用.更新UI应该在主线程中完成.

试试这个:

dispatch_async(dispatch_get_main_queue(), { () -> Void in
    self.message.text = messageContent
})
Run Code Online (Sandbox Code Playgroud)