Swift更新标签(包含HTML内容)需要1分钟

Fab*_*gue 8 label self swift swift-playground

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

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"

}
Run Code Online (Sandbox Code Playgroud)

这段代码在控制台中给我一个输出

test0
test3
test4
test1
test2

此外,标签没有时间更新为"test5",但更新为"test6"的标签需要30秒.

我不知道为什么这需要这么长时间,任何人都有想法?

Rik*_*les 32

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

您的闭包显然没有在主线程上运行,因为URL任务是异步的.因此更新闭包上的标签必须等待主线程运行其更新循环.修复它的方法是包装.text =调用以强制它在主线程上运行(无论如何都应该运行UI内容):

        dispatch_async(dispatch_get_main_queue()) {
            self.LBoutput.text = "test6"
        }
Run Code Online (Sandbox Code Playgroud)