iOS 9 Alamofire 从不加载图像

iOS 9 Alamofire never loads image

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

代码如下(非常简单):

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

有什么想法吗?可能是细胞没有被重新加载吗?我已经在 iOS 8 和 9.

中测试过了

希望你能帮助我! 谢谢

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

如果这不是您 运行 遇到的问题,那么我会听从其他人的建议并确保您可以使用 cURL.[=24= 下载图像]


更新#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 卷曲。它不下载图像数据,它只是打印出响应 headers。我还发现您需要传递 User-Agent header,否则您将始终得到 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 header。有效的是 image/jpeg。因此,默认情况下,AlamofireImage 不会验证此响应,也不会解码图像。

解决方案

谢天谢地,我们已经在 AlamofireImage 中内置了对此的支持。您可以将自定义 content-type 添加到 Request 响应序列化程序。具体操作如下:

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

这会将 image/jpg 内容类型注册为响应序列化系统可接受的内容类型。注册后,任何匹配 image/jpg 的内容类型都将被解码。更多相关信息,请参考AlamofireImage #58.