美文网首页
SDWebImage图片不显示 Error Domain=NSU

SDWebImage图片不显示 Error Domain=NSU

作者: NicoalsNC | 来源:发表于2019-11-12 10:29 被阅读0次

    最新做新项目,发现图片加载不出来。图片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加载图片是也失败,你可以从这些方案里面去查找。
    或许能够给你启发。

    文章和代码若有不对地方,欢迎批评指正。

    相关文章

      网友评论

          本文标题:SDWebImage图片不显示 Error Domain=NSU

          本文链接:https://www.haomeiwen.com/subject/qedfictx.html