当我运行以下代码时,我几乎可以立即打印响应,但是,它可能需要十秒或更长时间才能出现在我的 View 中。似乎大多数类似的问题是由 session 和处理程序在不同线程上引起的。但为什么它最终会起作用?很迷茫...
func downloadDetails(completed: DownloadComplete) {
let url = NSURL(string: _detailsURL)!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url) { (data, response, error) -> Void in
do {
let dict = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String:AnyObject]
if let eyeColor = dict["eyeColor"] as? String {
self._eyeColor = eyeColor
}
}
catch {
print("json error: \(error)")
}
}
task.resume()
}
最佳答案
您需要将 UI 更新发送到主队列,如果您尝试更新它而不将其发送到主队列,则可能需要一分钟多的时间来更新它。
func downloadDetails(completed: DownloadComplete) {
let url = NSURL(string: _detailsURL)!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url) { (data, response, error) -> Void in
do {
let dict = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String:AnyObject]
if let eyeColor = dict["eyeColor"] as? String {
dispatch_async(dispatch_get_main_queue()) {
self._eyeColor = eyeColor
}
}
}
catch {
print("json error: \(error)")
}
}
task.resume()
}
关于ios - NSURLSession 完成处理程序非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35029692/