gpt4 book ai didi

php - 在 Swift2 中发送 php POST 请求需要很长时间

转载 作者:行者123 更新时间:2023-11-28 21:32:53 25 4
gpt4 key购买 nike

我有一个应用程序可以向我的服务器发送 PHP POST 请求,并且应该会立即得到回复。使用我的“旧”功能,正常行为是我打开应用程序并在显示 View 时可以看到答案。

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秒后显示我的服务器的应答,这肯定是太长了。我什至可以看到我的变量立即填入了正确答案,但 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()
}

最佳答案

由于 NSURLSession.sharedSession().dataTaskWithRequest 是异步操作,它在后台线程上执行。并且所有的 UI 操作都必须在主线程上执行。当您收到来自 NSURLSession.sharedSession().dataTaskWithRequest 的回调时,您仍在后台线程中。因此,您需要从主线程重新加载 TableView 。使用下面的代码来做到这一点

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

关于php - 在 Swift2 中发送 php POST 请求需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35182688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com