最新做新项目,发现图片加载不出来。图片url是这样的
https://f.shiyongbao365.com/shell/weilaijishi/9f868738f6ac4be7b647f209e7d9fb6a.jpeg
浏览器可以加载出来,当在项目中SDWebImage加载不出来查看错误打印
Error Domain=NSURLErrorDomain Code=-1100
网上有各种解决方案,在这里也给大家总结出来
方案一:
[cell.diviceIV sd_setImageWithURL:[NSURL URLWithString:imgStringUrl] placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (image){
// Set your image over here
}else{
//something went wrong
}
}];
stackoverflow上有人的解决方式
把options 设置成SDWebImageRetryFailed 让其能在失败后重试
此方法不奏效
方案二:
有人说,可能是最开始没有请求到,这个url一直在图片请求失败列表里,然后循环请求失败。
于是我在请求前加了下面的代码:
[[SDWebImageManager sharedManager].failedURLs removeObject:url];
结果依然加载不出来
方案三:
检查url是否有中文字符,需要编码
url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
我的url没有中文字符,排除
方案四:
https请求导致的失败,在info.plist文件中添加属性
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
我已经添加了,这个也可以排除
方案五:
设置用户代理
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"];
}
结果也并没有解决,这个方案也启发检查图片请求头
方案六:
因为之前的项目,用到了局域名域名请求,所以查看代码发现在图片的请求头里面加了代码设置host
if (kUsingTestServer) {
[_imageDownloader setValue:@"nicolas.test.com" forHTTPHeaderField:@"Host"];
}
把相关的代码去掉,完美解决问题。
如果你使用SDWebImage加载图片是也失败,你可以从这些方案里面去查找。
或许能够给你启发。
文章和代码若有不对地方,欢迎批评指正。
网友评论