今天遇到一个问题,SDWebImage加载不出图片,通过浏览器可以正常打开链接看到图片,url如下:
报错信息如下:
通过网上查阅知道是因为此链接含有逗号,后台不方便改,那就自己来优化吧。
解决方法如下:
找到SDWebImage的源码中的"UIImage+WebCache.m",在下图中的方法内增加如图所示的代码。
网上对于这个的解释是说缺少 User-Agent 用户代理。 User Agent,是指浏览器,它的信息包括硬件平台、系统软件、应用软件和用户个人偏好。我的理解就是通过这部分代码设置的用户代理,其格式包含了“,”所需要的,所以就可以访问到含有逗号的图片了,没有这部分设置SD就会认为这个链接属于不支持的格式类型。(如果理解不对,欢迎指正)
代码如下:
NSString *userAgent = @"";
userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleIdentifierKey], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]];
if (userAgent) {
if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) {
NSMutableString *mutableUserAgent = [userAgent mutableCopy];
if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) {
userAgent = mutableUserAgent;
}
}
[[SDWebImageDownloader sharedDownloader] setValue:userAgent forHTTPHeaderField:@"User-Agent"];
}