好像這個題目有點長啊,但是這個意思確實是這樣表述的啊,大家理解一下!哈哈哈
首先說說這個問題的來源吧,因為項目中把圖片和視頻上傳到了七牛云,然后后面其他地方就使用后臺返回的七牛云鏈接等等進行顯示,包括視頻縮略圖也是后臺返回的,然后返回的視頻縮略圖鏈接如下樣式:
http://qiniu.****.****.cn/moto_ios_15616109587258.MOV?vframe/jpg/offset/1|imageView2/0/w/720
(*替換成每個人真實的地址即可,本文為了方便隱藏了真實地址)
對應的視頻鏈接:
http://qiniu.****.****.cn/moto_ios_15616109587258.MOV
然后就是這樣的圖片鏈接我出現(xiàn)了使用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,見鬼!
和我們有同樣問題的外國友人,或者世界開發(fā)者也有類似的問題,參考鏈接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];
這樣子轉(zhuǎn)碼后:
[_picImageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"pic_youjihua_default"]];
就真的顯示出來了,是不是很神奇!?。」?!不過這個時候還有一個小細節(jié)需要處理一下,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"]];
這樣就不會再有警告啦,同時圖片也顯示出來了!
附:上面警告會涉及一個關(guān)于編碼的問題,這篇文章大致能解釋關(guān)于以前和現(xiàn)在的編碼轉(zhuǎn)換問題,鏈接如下:iOS9之后 ,字符串NSUTF8StringEncoding 編碼與解碼。