小编典典

快速更新标签(带有HTML内容)需要1分钟

swift

我遇到了一个小问题,让我从代码开始

class ViewController: UIViewController {

@IBOutlet weak var LBoutput: UILabel!
@IBAction func BTclick(sender: AnyObject) {
    var url = NSURL(string: "http://google.com")
    println("test0")
    let getdata = NSURLSession.sharedSession().dataTaskWithURL(url){(data ,response , error) in
        var htmlContent = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("test1")
        println("test2")
        self.LBoutput.text = "test6"
    }
    println("test3")
    getdata.resume()
    println("test4")
    LBoutput.text = "test5"

}

这段代码给了我控制台的输出

test0
test3
test4
test1
test2

标签也将立即更新为“ test5”,但标签将更新为“ test6”大约需要30秒。

我不知道为什么要花这么长时间,有人知道吗?


阅读 345

收藏
2020-07-07

共1个答案

小编典典

在辅助线程中更新UI的常见问题:

由于URL任务是异步的,因此您的关闭显然不在主线程上运行。因此,更新闭包上的标签将必须等待主线程运行其更新循环。修复此问题的方法是包装.text =调用以使其强制在主线程上运行(无论如何,UI线程应在该线程上运行):

        dispatch_async(dispatch_get_main_queue()) {
            self.LBoutput.text = "test6"
        }
2020-07-07