HTTPsendRequest非常慢

时间:2014-10-31 12:31:53

标签: ios swift http-get

在此代码中,我从网站上获取一个字符串并在标签上显示。 显示标签上的字符串真的很慢!大约10秒钟。 但是当在控制台println(date)上打印字符串时立即生效。 我该如何解决这个问题?

    func HTTPsendRequest(request: NSMutableURLRequest,
    callback: (String, String?) -> Void) {
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
            (data, response, error) -> Void in
            if (error != nil) {
                callback("", error.localizedDescription)
            } else {
                callback(NSString(data: data,encoding: NSUTF8StringEncoding)!, nil)
            }
        }

        task.resume()
}

func HTTPGet(url: String, callback: (String, String?) -> Void) {
    var request = NSMutableURLRequest(URL: NSURL(string: url)!)
    HTTPsendRequest(request, callback) }


@IBAction func myButton(sender: AnyObject) {

    HTTPGet("http://www.mywebsite.com/test.txt") { (data: String, error: String?) -> Void in
        if (error != nil) {
            self.myLabel.text=error
            println(error)
        } else {
            self.myLabel.text=data
            println(data)
        }
    }
}

1 个答案:

答案 0 :(得分:2)

NSURLSession完成块不在主队列上运行。但是,您必须在主线程上运行UI更新,因此您应该在那里发送callback,例如:

func HTTPsendRequest(request: NSMutableURLRequest, callback: (String, String?) -> Void) {
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        (data, response, error) -> Void in

        dispatch_async(dispatch_get_main_queue()) {
            if (error != nil) {
                callback("", error.localizedDescription)
            } else {
                callback(NSString(data: data,encoding: NSUTF8StringEncoding)!, nil)
            }
        }
    }

    task.resume()
}