我有一个应用程序发送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()
}
2条答案
按热度按时间eoigrqb61#
由于
NSURLSession.sharedSession().dataTaskWithRequest
是异步操作,它在后台线程上执行。所有UI操作都必须在主线程上执行。当您收到来自NSURLSession.sharedSession().dataTaskWithRequest
的回调时,您仍然在后台线程中。因此,您需要从主线程重新加载表视图。使用以下代码来完成此操作wj8zmpe12#
您必须更新主线程上的UI