说说iOS开发中使用浏览器打开图片链接能浏览图片,但项目中使用S
好像这个题目有点长啊,但是这个意思确实是这样表述的啊,大家理解一下!哈哈哈
首先说说这个问题的来源吧,因为项目中把图片和视频上传到了七牛云,然后后面其他地方就使用后台返回的七牛云链接等等进行显示,包括视频缩略图也是后台返回的,然后返回的视频缩略图链接如下样式:
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 编码与解码。