如何知道NSData是否完成下载以触发方法

时间:2015-12-11 16:56:11

标签: ios swift afnetworking nsurlconnection nsurlsession

我正在绘制地图上的标记,对于我需要从URL下载特定图像的每个标记,显然我需要执行此异步,但我需要知道下载何时完成才触发{{1否则应用程序会崩溃,因为addMarkerToMap ()

我尝试过使用过块,但在下载完成之前会发送NSData == nilcompletion响应。我也尝试过NSURLSessionDelegate但是从不调用Delegate方法。

如果有人可以帮助我,或者至少引导我以一种可行的方式来实现这一目标。

感谢,

修改

这是我尝试的最后一个代码,没有错误正在打印并且没有调用success

addMarkerToMap(data)

2 个答案:

答案 0 :(得分:0)

它应该是if error == nil

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

答案 1 :(得分:0)

您必须致电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()
}