2014-02-24 228 views
0

我從網絡獲取數據。在viewDidLoad方法我初始化並保留我的數組:檢查NSMutableArray元素是否存在

arrBannersIMG = [[NSMutableArray alloc]init]; 
[arrBannersIMG retain]; 

在我的cellForRowAtIndexPath需要檢查是否arrBannersImg[indexPath.row]是存在的,如果是 - 從這個陣列設置cell.image,如果不是 - 從網絡初始化的UIImage的數據,以及將此圖像添加到arrBannersIMG。我嘗試這樣做:

if (_arrayOfImages[indexPath.row] == [NSNull null]) { 
     // 
} 

但我在這一行錯誤:

終止應用程序由於未捕獲的異常 'NSRangeException',原因是: '* - [__ NSArrayM objectAtIndex:]:指數0超出界限爲空 數組」

我可以檢查陣列是這樣的:

if (!array || !array.count){ 
    ... 
} 

但我需要檢查當前元素,而不是所有的數組。我怎樣才能做到這一點?

+0

爲什麼不檢查,*** if(array.length> = indexPath.row)***? – EmptyStack

+0

您應該添加NSNull elemenets等於行中的行數到'viewDidLoad'中的數組 – Szu

回答

1

你應該改變你的方法並利用一些開源代碼。你不想真的使用稀疏填充的數組(真正快速滾動會導致你的問題)。你也想確保在後臺下載圖像。

看看如何使用SDWebImage並將所有圖片網址存儲在您的數組中。現在,當你需要顯示圖像時,只需將URL傳遞給SDWebImage,它將根據您的需要從緩存/互聯網加載。

0

我不知道爲什麼你想看看一個空數組但要解決這個錯誤中的元素,嘗試:

if(array.count > indexPath.row) { 
    if (_arrayOfImages[indexPath.row] == [NSNull null]) { 
     // ... 
    } 
} 

希望這將有助於。

0

首先,我會建議你,根據你的條件,你應該使用CellForRowAtIndexPath方法處理數組。

這是因爲可能你的數組已經是空的,你試圖將它與不存在的indexpath.row進行比較。這就是爲什麼它墜毀。

首先,你應該檢查_arrayOfImages是否有任何計數。

_arrayOfImages=arrBannersIMG; 

if([_arrayOfImages count]>0) 
{ 
NSData *imgData = UIImageJPEGRepresentation([_arrayOfImages indexPath.row], 0); 
UIImage *img = [UIImage imageWithData:[_arrayOfImages indexPath.row]; 
} 
else 
{ 
//init UIImage by data from Internet 
arrBannersIMG= //Insert your image object in array 
} 

我不知道你的整個場景,但這種陣列的實施將崩潰拯救我們,如果我們訪問它的委託方法類似的cellForRowAtIndexPath。

希望它有幫助。請檢查並告訴我們是否需要使用其他解決方案。