iOS使用 SDWebImage加载网络图片,提示NSURLErrorDomain Code=-1100,实际图片是存在的解决方法(Swift版本)

        最近做了一个批量添加商品的功能,一次性添加了商品成功后,首先刷新页面,把商品刷新出来,再另开一个线程一张张上传图片。

        此时出现了一个bug。前面几个上传的商品总是有几个商品图片是加载不出来的。我使用的是SDWebImage去加载图片。报错提示:NSURLErrorDomain Code=-1100。但是,实际上,我把图片的地址拷贝到浏览器中,是可以看到的,然后换一个手机登录查看也是可以看到的。那么说明地址是正确的。

        我继续查找NSURLErrorDomain Code=-1100的错误原因。发现NSURLErrorDomain 的错误编码如下图:

typedef enum
{
   NSURLErrorUnknown = -1,  //未知
   NSURLErrorCancelled = -999, //取消
   NSURLErrorBadURL = -1000, //错误URL
   NSURLErrorTimedOut = -1001, //超时
   NSURLErrorUnsupportedURL = -1002, //不支持URL
   NSURLErrorCannotFindHost = -1003, //找不到主机
   NSURLErrorCannotConnectToHost = -1004, //无法连接到主机
   NSURLErrorDataLengthExceedsMaximum = -1103, //数据长度超过最大值
   NSURLErrorNetworkConnectionLost = -1005, //网络连接丢失
   NSURLErrorDNSLookupFailed = -1006, //DNS查询失败
   NSURLErrorHTTPTooManyRedirects = -1007, //HTTP重定向太多
   NSURLErrorResourceUnavailable = -1008, //资源不可用
   NSURLErrorNotConnectedToInternet = -1009, //未连接到互联网的NSURL错误
   NSURLErrorRedirectToNonExistentLocation = -1010, //重定向到不存在的位置
   NSURLErrorBadServerResponse = -1011, //服务器响应错误
   NSURLErrorUserCancelledAuthentication = -1012,//用户取消身份验证
   NSURLErrorUserAuthenticationRequired = -1013,
   NSURLErrorZeroByteResource = -1014, //0字节资源
   NSURLErrorCannotDecodeRawData = -1015,//无法解码原始数据
   NSURLErrorCannotDecodeContentData = -1016,//无法解码内容数据
   NSURLErrorCannotParseResponse = -1017, //无法解析响应
   NSURLErrorFileDoesNotExist = -1100,//文件不存在
   NSURLErrorFileIsDirectory = -1101,//文件目录
   NSURLErrorNoPermissionsToReadFile = -1102,//没有权限读取文件
   NSURLErrorSecureConnectionFailed = -1200, //安全连接失败
   NSURLErrorServerCertificateHasBadDate = -1201, //服务器证书错误日期
   NSURLErrorServerCertificateUntrusted = -1202,//服务器证书不可信
   NSURLErrorServerCertificateHasUnknownRoot = -1203,//服务器证书有未知的根
   NSURLErrorServerCertificateNotYetValid = -1204,//服务器证书无效
   NSURLErrorClientCertificateRejected = -1205,//客户端证书拒绝
   NSURLErrorClientCertificateRequired = -1206, //客户端证书要求
   NSURLErrorCannotLoadFromNetwork = -2000,//无法从网络加载
   NSURLErrorCannotCreateFile = -3000,//无法创建文件
   NSURLErrorCannotOpenFile = -3001,//无法打开文件
   NSURLErrorCannotCloseFile = -3002,//无法关闭文件
   NSURLErrorCannotWriteToFile = -3003,//无法写入文件
   NSURLErrorCannotRemoveFile = -3004,//无法删除文件
   NSURLErrorCannotMoveFile = -3005,//无法移动文件
   NSURLErrorDownloadDecodingFailedMidStream = -3006,//下载解码失败中流
   NSURLErrorDownloadDecodingFailedToComplete = -3007//下载解码失败
}

        -1100错误是文件不存在。但是之前我已经证实了地址是存在的。此时我想会不会是SDWebImage的加载机制的问题。于是在网上一搜,还真与SDWebImage有关。原来,SDWebImage默认选项的是加载失败后,不会重新加载。而我之前写的逻辑,在添加商品成功后就刷新页面去显示,此时图片还没有上传成功,于是,就得到了-1100,文件不存在的错误。但是之后,由于SDWebImage加载过,所以不会再去请求加载,于是,图片就一直显示不出来,一直是-1100的错误。

        解决方法:

        SDWebImage中加载图片的方法如下:

- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock {
    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];
}

        在sd_setImageWithURL方法中,将参数options:(SDWebImageOptions),设置成SDWebImageRetryFailed就行了。具体swift调用代码如下:

self.sd_setImage(with: URL, placeholderImage: placeholder, options: .retryFailed) { (_, error, _, _) in
    if error != nil {
        print("url:\(url) error:\(error?.localizedDescription ?? "")")
    }
}

        之后运行,便可以看见,商品图片随着一次次的上传,一张张加载显示出来了。问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值