gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:51:29 25 4
gpt4 key购买 nike

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

我尝试使用 block ,但在下载完成之前发送了完成成功响应。我也尝试过使用 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)
}
})

}
}

最佳答案

您必须调用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()
}

关于ios - 如何知道 NSData 是否完成下载以触发方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228660/

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