2012-10-20 39 views
0

我正在做一個代碼,顯示列表上的人的名字。我使用NSArray崩潰的代碼中的錯誤

這個列表每個日期都不一樣,所以我的問題是當只有1個人或沒有人簽名時,我創建了一個索引超出人數限制的數組,它崩潰了。我知道發生這種情況的原因是數組是空的,但是如何讓代碼忽略空數組?

我試圖做一個「如果」計數數組的數量,然後決定發佈數組或只發布沒有名稱。但它不能像這樣工作,我仍然得到了超出界限的例外。

我該如何管理空陣列?

我的代碼:

NSString *html = [request2 responseString]; 
NSMutableArray *arr2 = [html componentsSeparatedByString:@"vagter"]; 
NSString *html1 = [arr2 objectAtIndex:1]; 

//name1 
NSMutableArray *arr3 = [html1 componentsSeparatedByString:@"<td><font color=#ffffff>"]; 
NSString *html2 = [arr3 objectAtIndex:1]; 
NSMutableArray *arr4 = [html2 componentsSeparatedByString:@"</font></td>"]; 
NSString *html3 = [arr4 objectAtIndex:0]; 

_name.text = html3; 

//name 2 
NSMutableArray *arr5 = [html1 componentsSeparatedByString:@"<td><font color=#ffffff>"]; 

if ([arr5 count] > 4) { 
    NSString *html4 = [arr5 objectAtIndex:5]; 
    NSMutableArray *arr6 = [html4 componentsSeparatedByString:@"</font></td>"]; 
    NSString *html5 = [arr6 objectAtIndex:0]; 

    _name.text = html5; 
} 
else 
{ 
    _name1.text = @"No name"; 
} 

回答

0

它應該是:

if ([arr5 count] > 5) { 

    NSString *html4 = [arr5 objectAtIndex:5]; 
    ... 

事實上,指數5將對應於第六個數組元素,所以你必須有它的至少6個對象。

如果您想在所有情況下檢查數組邊界,請使用相同的模式。

+0

你真是太對了;嗯嗯抱歉的愚蠢問題,那麼,我確實花了很多時間來檢查我的代碼一遍又一遍:P –

+0

不用擔心:當你遇到困難時,通常它是可以很容易地監督的東西...另一對眼睛可以幫助... – sergio

0

問題是,您期望從componentsSeparatedByString返回根據您的期望返回一致的結果。

顯然這是行不通的。

數組處理很簡單。不要問那裏沒有的物體。

檢查計數並只訪問索引從0到count - 1;

如果計數爲零,則不訪問任何內容。