ios - NSURLSession 完成处理程序非常慢

标签 ios swift2 nsurlsession completionhandler

当我运行以下代码时,我几乎可以立即打印响应,但是,它可能需要十秒或更长时间才能出现在我的 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/

相关文章:

iphone - 多张图片 UITableview

macos - 如何实时检查 NSTextField - Swift OS X

ios - 执行 segue 后,嵌入式导航栏在 iOS 7(小屏幕)上消失,但在 iOS 9(大屏幕)上不消失

ios - 在 Alamofire 中更改 timeoutIntervalForRequest 的正确方法

ios - 按顺序将图像附加到数组中

ios - CCAction block "tweening"

ios - Xcode加载ViewController而不释放旧的

ios - 在 Swift3 中发送 JSON POST 请求

应用程序关闭时的 iOS 任务

java - 具有 associatedtype 协议(protocol)的数组