2011-04-22 51 views
1

我有一個SSCollectionView是在NSCollectionView和UITableView之後建模的。它調用一個函數來加載indexPath中的每個項目。iPhone SDK SSCollectionView從線程加載項目

我想將圖像異步加載到這些路徑的每一箇中。

- (SSCollectionViewItem *)collectionView:(SSCollectionView *)aCollectionView itemForIndexPath:(NSIndexPath *)indexPath { 

.... 
    [self startLoadingItem:item indexPath:indexPath]; 

    return item; 
} 

-(void)startLoadingItem:(SSCollectionViewItem *)collectionViewItem indexPath:(NSIndexPath *)indexPath 
{ 
    [SEThreadInvocation detachNewThreadSelector:@selector(loadItem:indexPath:) toTarget:self withObjects:collectionViewItem,indexPath, nil]; 
} 

SEThreadInvocation只是NSThread的一個子類,所以我可以發送多個對象給選擇器。

-(void)loadItem:(SSCollectionViewItem *)collectionViewItem indexPath:(NSIndexPath *)indexPath { 

... 

    collectionViewItem.imageView.image = imageToDisplay; 

} 

正在發生的事情是,代碼開始工作,但每次採集重裝時間(通常)它把圖像遍佈隨機集合視圖。

我相信這是因爲我的SSCollectionViewItem每次都指向一個不同的內存位置,而且我的項目不是線程安全的,所以當它們在內存中更改時,它只是將我的圖像蓋印在整個位置。

此外,我認爲它可能會取代內存中的圖像,所以我用數字替換了它,並在重新加載時將數字反射到集合視圖中。

如何在這種情況下讓我的對象線程安全?

+0

您確定它是SSCollectionView嗎?或者你的意思是NSCollectionView? – 2011-04-22 22:36:44

+0

它是來自SS Toolkit的SSCollectionView。儘管它是在NSCollectionView之後建模的。 – 2011-04-24 00:53:35

回答

1

SSToolkit有一個樣本目錄項目,它有一個SSCollectionView演示。它以您需要的方式加載圖像。