【问题标题】:How to know if NSData finished downloading to trigger a method如何知道 NSData 是否完成下载触发方法
【发布时间】:2015-12-11 16:56:11
【问题描述】:

我正在地图上绘制标记,对于每个标记,我需要从 URL 下载特定图像,显然我需要异步执行此操作,但在触发 addMarkerToMap () 之前我需要知道下载何时完成,否则应用会因为NSData == nil而崩溃。

我尝试过使用块,但在下载完成之前发送了completionsuccess 响应。我也尝试过使用 NSURLSessionDelegate,但从未调用过 Delegate 方法。

如果有人可以帮助我或至少指导我找到一种可行的方法来实现这一点。

谢谢,

编辑

这是我尝试的最后一个代码,打印时没有错误,addMarkerToMap(data) 没有被调用:

func downloadImageFromURL () {
    let config = NSURLSessionConfiguration.defaultSessionConfiguration()
    let session = NSURLSession (configuration: config)
    let task = session.dataTaskWithURL(self.markerURL!) { (data, response, error) -> Void in
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                if ((error != nil)) {
                    self.addMarkerToMap (data)
                } else {
                    print(error)
                }
            })

    }
}

【问题讨论】:

  • 用一些相关代码更新您的问题。然后人们可以帮助您修复代码。
  • 是的,请添加一些代码。根据定义,在数据可用之前不应调用完成处理程序。您要么触发错误(并且永远不会加载数据),要么您对接收到的数据做错了什么。
  • 完成,我添加了我尝试的最后一个代码。谢谢。 @rmaddy
  • 编辑完成,提前感谢@jcaron

标签: ios swift afnetworking nsurlconnection nsurlsession


【解决方案1】:

你必须调用resume(),否则任务永远不会完成。

就像@vadian 所说,您必须重写为if ((error == nil)),否则您的应用可能会在解开可选的数据值并崩溃时找到nil

所以,它会是这样的:

func downloadImageFromURL () {
  let config = NSURLSessionConfiguration.defaultSessionConfiguration()
  let session = NSURLSession (configuration: config)
  let task = session.dataTaskWithURL(self.markerURL!) { (data, response, error) -> Void in
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
      if error == nil {
        self.addMarkerToMap(data)
      } else {
        print(error)
      }
    })
  }
  task.resume()
}

【讨论】:

  • error == nil 是我写问题时的一个错误,修复它的是task.resume()。非常感谢华莱士
【解决方案2】:

应该是if error == nil

if error != nil {
  print(error!)
} else {
  self.addMarkerToMap(data!)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多