我正在尝试从URL获取图像,但contentsOfURL方法保持返回nil。该网址是合法的,只有一张图片。 我已经尝试了dispatch_get_global_queue方法以及下面描述的方法。无论我运行多少次,NSData值总是为零。我已经尝试过重启模拟器了。网络也很快,网络也没有问题。 这是代码失败的部分
var imageURL : NSURL(string : "https://www.nasa.gov/sites/default/files/wave_earth_mosaic_3.jpg")
if let url = imageURL{
spinner?.startAnimating()
let request = NSURLRequest(URL: url)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){(data,response,error) -> Void in
self.imageData = NSData(contentsOfURL: url)
}
dispatch_async(dispatch_get_main_queue()){
if url == self.imageURL{
self.image = UIImage(data: self.imageData!)
}
else{
}
}
task.resume()
}
答案 0 :(得分:0)
这是你的功能应该是这样的。不需要GCD。
如{strong> Eric D 所述,let task = ....
和NSData(contentsOfURL: url)
也无需再次下载图片。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var imageURL = "https://www.nasa.gov/sites/default/files/wave_earth_mosaic_3.jpg"
loadImage(fromUrl: imageURL) { (image, error) in
if let image = image {
print("got an image")
} else {
print("got an error")
}
}
}
// pretty function that takes a string and a callback
// it sends either an image or an error back through the callback
func loadImage(fromUrl urlString: String, completion:(image:UIImage?,error:NSError?) -> Void) {
guard let url = NSURL(string:urlString) else {
// invalid url
completion(image: nil,error: nil)
return
}
let request = NSURLRequest(URL: url)
NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in
if let error = error {
completion(image: nil,error: error)
return
}
guard let data = data, image = UIImage(data:data) else {
// no connection error, but no image extracted from data
return completion(image: nil, error: nil)
}
completion(image: image, error: nil)
}.resume()
}
}