2013-02-07 30 views
0

我在我的視圖控制器之間異步加載圖像時遇到問題。我有一個tableView控制器,當你點擊一行時打開一個集合視圖控制器。當收集視圖打開時,圖像從互聯網下載時會暫停一段時間。UICollectionViewController多線程圖像加載

我把下面的代碼放到了collectionView:cellForItemAtIndexPath:中,但是這會導致同步加載,並使程序滯後。

-(UICollectionViewCell *) collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    static NSString *CellIdentifier = @"CollectionCell"; 
    CollectionCell *cell = [cv dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; 
    NSData *imageData = [NSData dataWithContentsOfURL:[self.theImage objectAtIndex:indexPath.row]]; 
    cell.itemImage.image = [UIImage imageWithData:imageData]; 

    return cell; 
} 

我的問題是,其中如何實現代碼,這樣集合視圖加載空單元格,而圖像下載(然後他們出現下載後)?

我試圖使用大中央調度,但我無法完全弄清楚。如果有人能幫助我指出正確的方向,我會很感激。

+0

你想異步地下載一個線程,這不是主線程。看看蘋果的IconDownloader:http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Listings/Classes_IconDownloader_m.html#//apple_ref/doc/uid/DTS40009394-Classes_IconDownloader_m-DontLinkElementID_6 –

+0

我有collectionview中有多個圖像,並且都大於圖標的大小。這仍然適用? – mrcharlie

+0

當然是的。這正是你在找什麼;) –

回答

0

對於那種延遲加載,我總是用:

https://github.com/rs/SDWebImage

這解決了我的大部分問題時,我想對錶中異步加載圖像/ collectionviews等

它支持緩存已經下載的圖像,只是節省了很多頭痛。

+0

這比使用Boris提到的方法更好嗎? – mrcharlie

+0

這可能是一樣的,但它需要很多代碼和測試。這是一個爲你完成大部分工作的框架。 –

+0

這讓事情變得非常簡單,謝謝!我有一個問題,我有一個字符串數組,但是當我運行它,我得到的錯誤:***終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:' - [NSURL長度]:無法識別的選擇器發送到實例0xd8821c0'' 但是,當我手動填寫'setImageWithURL:[NSURL URLWithString:@「http://www.test.com/img.jpg」]'時,我沒有收到錯誤。有什麼建議麼? – mrcharlie