TableViewCell下载的问题
生活随笔
收集整理的這篇文章主要介紹了
TableViewCell下载的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
很多公司會有這種需求,要求在cell中下載文件,或者顯示下載進度。由于cell的復用機制導致在滑動的時候,下載進度出現紊亂的效果,這種問題出現最好的解決方式是:
處理好各個層級的關系,數據層和UI層的分層關系,就能很好地解決這個問題。最后別忘了刷新UI的時候要回到主線程。
當時今天只討論這個問題,顯得這個問題過于簡單。今天我們討論另一層層面的問題,結合block,結合cell復用,一起來探索。
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString: imageUrl] options:SDWebImageDownloaderUseNSURLCache progress:NULL completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {dispatch_async(dispatch_get_main_queue(), ^{__strong __typeof(&*weakSelf)strongSelf = weakSelf;[strongSelf showImageView:imageUrl image: image];});}];如上代碼,如果整個下載過程發生在cell里面,就會發生cell復用混亂的問題,而且問題根本不好查,也不好修改。
問題的原因是,雖然這個cell會綁定model,下載過程也是model的url,但是過程中,self.model.imageUrl被局部變量imageUrl來接收,局部變量又在block里面進行了展示,所以下載完的結果不一定展示到了當前的cell中。很多小伙伴可能納悶,cell依賴于model,局部變量的值依賴于model,沒毛病呀,數據不會發生問題呀。
可問題偏偏還是發生了!!!
經過長時間的推敲和修改代碼,發現把代碼改成如下就不會有問題:
[strongSelf showImageView:self.model.imageUrl image: image];問題原因是:局部變量imageUrl依賴于block,block又在cell里面,局部變量會隨著cell復用而跟隨到復用的cell,所以展示的cell的url就會發生問題。
標記:
總結
以上是生活随笔為你收集整理的TableViewCell下载的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 话说产品方法论——需求与用户研究
- 下一篇: 【Storm】Spout的storm-s