在Swift2中发送php POST请求花费的时间太长

a0zr77ik  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(189)

我有一个应用程序发送PHP POST请求到我的服务器,应该会立即得到一个回复。使用我的“旧”函数,正常的行为是我打开应用程序,可以在视图显示的那一刻看到回复。

var answer:String = "" //global
func getAnswer() {
    let URL:NSURL = NSURL(string:"https://someurl.com/index.php")!
    let request:NSMutableURLRequest = NSMutableURLRequest(URL: URL)
    let postString = "some=POSTMESSAGE"
    request.HTTPMethod = "POST"
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {
        (response,data,error) in
        self.answer = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String
        self.tableView.reloadData()
    }
}

但是NSURLConnection.sendAsynchronousRequest在iOS9中被弃用,我需要切换到NSURLSession.sharedSession(). dataTaskWithRequest。在实现NSURLSession.sharedSession().dataTaskWithRequest之后,我的服务器的答案在20秒后显示,这肯定是太长了。我甚至可以看到my变量立即填充了正确的答案,但是tableview没有立即显示它,这是什么问题?

var answer:String = "" // global
func getAnswer() {
    let URL:NSURL = NSURL(string:"https://https://someurl.com/index.php")!
    let request:NSMutableURLRequest = NSMutableURLRequest(URL: URL)
    let postString = "some=POSTMESSAGE"
    request.HTTPMethod = "POST"
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
        let c = NSString(data: data!, encoding: 4) as! String
        self.answer = c
        self.tableView.reloadData()
        })
    task.resume()
}
eoigrqb6

eoigrqb61#

由于NSURLSession.sharedSession().dataTaskWithRequest是异步操作,它在后台线程上执行。所有UI操作都必须在主线程上执行。当您收到来自NSURLSession.sharedSession().dataTaskWithRequest的回调时,您仍然在后台线程中。因此,您需要从主线程重新加载表视图。使用以下代码来完成此操作

dispatch_async(dispatch_get_main_queue()) {
     self.answer = c
     self.tableView.reloadData()
}
wj8zmpe1

wj8zmpe12#

您必须更新主线程上的UI

dispatch_async(dispatch_get_main_queue()) {
    self.answer = c
    self.tableView.reloadData()   
}

相关问题