美文网首页iOS开发点滴iOS开发知识小集iOS学习开发
说说iOS开发中使用浏览器打开图片链接能浏览图片,但项目中使用S

说说iOS开发中使用浏览器打开图片链接能浏览图片,但项目中使用S

作者: 小蜜蜂Bee | 来源:发表于2019-07-01 17:58 被阅读7次

    好像这个题目有点长啊,但是这个意思确实是这样表述的啊,大家理解一下!哈哈哈

    首先说说这个问题的来源吧,因为项目中把图片和视频上传到了七牛云,然后后面其他地方就使用后台返回的七牛云链接等等进行显示,包括视频缩略图也是后台返回的,然后返回的视频缩略图链接如下样式:

    http://qiniu.****.****.cn/moto_ios_15616109587258.MOV?vframe/jpg/offset/1|imageView2/0/w/720
    

    (*替换成每个人真实的地址即可,本文为了方便隐藏了真实地址)
    对应的视频链接:

    http://qiniu.****.****.cn/moto_ios_15616109587258.MOV
    

    然后就是这样的图片链接我出现了使用SDWebImage就是显示不出来的问题,但是把链接复制到浏览器中是能正常展示的,说明它确实是图片!
    那我们就从SDWebImage这里开始查起,如下:

    [self.logoImgView sd_setImageWithURL:[NSURL URLWithString:[defaults stringForKey:@"userPortraitUri"]] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
    
          NSLog(@"错误信息:%@",error);
    
    }];
    

    从这里可以看到错误信息:

    SDWebImageErrorDomain Code=1000 "Image url is nil"
    

    很明确就是链接都没有,链接为空!!!但是我们却明明传入了URL,见鬼!
    和我们有同样问题的外国友人,或者世界开发者也有类似的问题,参考链接https://stackoverflow.com/questions/24228348/sdwebimage-does-not-show-an-image-although-the-image-exist-remotely-on-the-serve
    不过我没有从这样的过程中看到一样的问题,但是有一个回答却让我顿悟了一番,如下图:

    关键字样

    这里进行了一次编码,然后我就想着是不是我这个链接也不对,因为它也确实不像我们平时遇见的带.jpg或者.png后缀的图片链接,所以我就尝试着写了第一个代码,如下:

     NSString *urlStr = @"http://qiniu.****.****.cn/moto_ios_15616109587258.MOV?vframe/jpg/offset/1|imageView2/0/w/720";
     NSString *url = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    

    这样子转码后:

    [_picImageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"pic_youjihua_default"]];
    

    就真的显示出来了,是不是很神奇!!!哈哈哈!不过这个时候还有一个小细节需要处理一下,Xcode会提醒我们这样子的,如下图:

    方法警告

    不换也是可以使用,但是为了解除这个警告,下面我们还有办法呢,代码如下:

    NSString *urlStr = @"http://qiniu.****.****.cn/moto_ios_15616109587258.MOV?vframe/jpg/offset/1|imageView2/0/w/720";
    NSString *url = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    [_picImageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"pic_youjihua_default"]];
    

    这样就不会再有警告啦,同时图片也显示出来了!

    附:上面警告会涉及一个关于编码的问题,这篇文章大致能解释关于以前和现在的编码转换问题,链接如下:iOS9之后 ,字符串NSUTF8StringEncoding 编码与解码

    相关文章

      网友评论

        本文标题:说说iOS开发中使用浏览器打开图片链接能浏览图片,但项目中使用S

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