iOS 9 Alamofire永远不会加载图像

时间:2015-12-10 14:20:15

标签: ios uitableview alamofire tableviewcell alamofireimage

我使用AlamofireImage将图像加载到tableview单元格中的ImageView中(在单独的xib文件中) 问题是图像永远不会出现。我认为代码是正确的,网址也是有效的。

这是代码(非常简单):

let placeholderImage = UIImage(named: "imgNoPhoto1")    
if let urlImage = NSURL(string: urlString) {
      photoImage.af_setImageWithURL(urlImage, placeholderImage: placeholderImage)
    }

有什么想法吗?可能是单元格没有重新加载?我已经在iOS 8和9中测试了它。

希望你能帮助我! 谢谢

1 个答案:

答案 0 :(得分:4)

根据您是否取消prepareForReuse中的请求,您可能遇到了我刚刚在AlamofireImage #55中修复的错误。在接下来的几天里,我将在这里推出一个新的版本。如果这实际上是您遇到的问题,您可以暂时注释掉取消逻辑,这应该可以解决您的问题,直到我们发布修复程序。

如果这不是您遇到的问题,那么我应该遵循其他人的建议,并确保您可以使用cURL下载图片。

更新#1

好的,我发现了你的问题。服务器未返回有效的内容类型,导致AlamofireImage无法验证图像,并且不会尝试将数据解码为图像。您可以通过在终端中运行以下命令来找到它:

curl -H "User-Agent: iOS" -s -D - http://files.encuentra24.com/normalsq/sv/58/08/68/sv/58/08/68/5808689_5e7d99.jpg -o /dev/null

这样做是针对您提供的URL运行curl。它不会下载图像数据,只是打印出响应头。我还发现你需要传递User-Agent标题,否则你总会得到403.这里是curl命令打印出的内容:

cnoon:~$ curl -H "User-Agent: iOS Example/com.alamofire.iOS-Example (1; OS Version 9.1 (Build 13B137))" -s -D - http://files.encuentra24.com/normalsq/sv/58/08/68/sv/58/08/68/5808689_5e7d99.jpg -o /dev/null
HTTP/1.1 200 OK
Cache-Control: max-age=2592000, public
Content-Type: image/jpg
Date: Fri, 11 Dec 2015 16:16:38 GMT
Expires: Sun, 10 Jan 2016 16:16:38 GMT
Pragma: no-cache
Server: nginx/1.7.12
Set-Cookie: sessioninfo=uv491lgtjqvkmt267l1nmlbm24; path=/
Set-Cookie: esid=deleted; expires=Thu, 11-Dec-2014 16:16:37 GMT; path=/
Vary: Accept-Encoding
Content-Length: 23757

现在这个输出的重要部分是Content-Type: image/jpg。这实际上并不是有效的Content-Type标头。有效的是image/jpeg。因此,默认情况下,AlamofireImage不会验证此响应并且不会对图像进行解码。

解决方案

幸运的是,我们已经支持这种内置于AlamofireImage的内容。您可以向Request响应序列化程序添加自定义内容类型。你如何做到这一点如下:

Alamofire.Request.addAcceptableImageContentTypes(["image/jpg"])

这将使用响应序列化系统将image/jpg内容类型注册为可接受的内容类型。注册后,将解码匹配image/jpg的任何内容类型。有关此问题的详细信息,请参阅AlamofireImage #58