Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift Update Label (with HTML content) takes 1min

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?

like image 996
Fabian Boulegue Avatar asked Sep 01 '14 10:09

Fabian Boulegue


1 Answers

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"
        }
like image 196
Rikkles Avatar answered Nov 17 '22 18:11

Rikkles