根据您是否取消请求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。