Swift Update Label (with HTML content) takes 1min

这一生的挚爱 提交于 2019-12-17 18:48:52

问题


I got a small problem, let me start with the code

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"

}

This codes give me a output in the console of

test0
test3
test4
test1
test2

Also the label updates to "test5" with no time, but the label to update to "test6" takes like 30sec.

I have no clue why this takes so long, anyone a idea?


回答1:


Usual problem of updating UI in a secondary thread:

Your closure is obviously not running on the main thread, as the URL task is asynchronous. So updating the label on the closure will have to wait for the main thread to run its update loop. The way to fix it is to wrap the .text = call to force it to run on the main thread (which is where the UI stuff should run anyway):

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



回答2:


In Swift 3:

DispatchQueue.main.async
{
    self.LBoutput.text = "test6"
}


来源:https://stackoverflow.com/questions/25603390/swift-update-label-with-html-content-takes-1min

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!