在Swift中更新的UILabel文本拒绝显示

在学习Swift的同时,我正在编写一个简单的iOS应用程序来从一个网站为给定的城市刮取天气信息并将其显示在UILabel中。

代码使用“NSURLSession.sharedSession()。dataTaskWithURL”闭包。 虽然我能够正确获取数据并捕获“UILabel.text”中的相关文本,但我无法获得实际的应用程序来显示更新的UILabel。

我究竟做错了什么? 这是相关的代码:

@IBAction func buttonPressed(sender: AnyObject) { var urlString = "http://www.weather-forecast.com/locations/" + cityName.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) as String var contentArray = urlContent.componentsSeparatedByString("<span class=\"phrase\">") var weatherInfo = contentArray[1].componentsSeparatedByString("</span>") self.resultShow.text = weatherInfo[0] // Text does not show in the app println(weatherInfo[0]) // This works correctly println(self.resultShow.text) // This works correctly } task.resume() } 

你需要在主线程上执行你的UI更新

NSURLSession完成处理程序将始终在后台线程上调用。 要更新你的UI,一个简单的dispatch_async到主线程就足够了:)

 @IBAction func buttonPressed(sender: AnyObject) { var urlString = "http://www.weather-forecast.com/locations/" + cityName.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) as String var contentArray = urlContent.componentsSeparatedByString("<span class=\"phrase\">") var weatherInfo = contentArray[1].componentsSeparatedByString("</span>") dispatch_async(dispatch_get_main_queue(), { //perform all UI stuff here self.resultShow.text = weatherInfo[0] }) } task.resume() } 

编辑

虽然在这里并不重要,但由于封闭不被保留,在某些情况下,重要的是要明确宣布捕获列表以避免保留周期 。