gpt4 book ai didi

ios - 在 Swift 闭包内更新的 UILabel 文本拒绝显示

转载 作者:可可西里 更新时间:2023-10-31 23:54:17 25 4
gpt4 key购买 nike

在学习 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()
}

编辑

虽然这里不重要,因为没有保留闭包,但在某些情况下它很重要 explicitly declare capture lists to avoid retain cycles .

关于ios - 在 Swift 闭包内更新的 UILabel 文本拒绝显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26262398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com