2014-02-18 33 views
-1

我需要索引和邊界的幫助。使用用文件構建的NSArray

我有一個NSArray,它包含一個用«分隔的分析文件; »。 所以基本上:

- (NSArray *) getArrayFromFile{ 
    NSArray *fileArray; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fileName = [NSString stringWithFormat:@"%@/list.txt", documentsDirectory]; 
    NSString *writedStr = [[NSString alloc]initWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:nil]; 
    fileArray = [writedStr componentsSeparatedByString:@";"]; 
    return fileArray; 
} 

我想使用這個數組。

NSArray* myArray = [self getArrayFromFile]; 
    for(k = 0; j < [myArray count]; k++){ 
     NSLog(@"%@",[myArray objectAtIndex:k]); 
    } 

但是當我運行低谷返回NSArray的,我總有一種

以下是完整的錯誤「類型NSException的未捕獲的異常終止」:http://pastebin.com/qApXU2s0當NSArray中包含@「你好」,@ 「World」,@「Array Content」和原始文件「Hello; World; Array Content」;

有人可以幫我這個..? 謝謝!

+0

>「時的NSArray包含@」你好「 @‘世界’,@‘陣列的內容’,」 您是否已經驗證了數組實際上確實含有這些條目,通過在for循環之前插入一個斷點? 您的for循環初始化'k',但條件檢查'j'。這可能是唯一的錯誤。 – Totoro

回答

2

如果我們看一看你的for循環:

for(k = 0; j < [myArray count]; k++){ 

你可以看到,您使用的是for語句的第一和第三部分的變量k,並在中間部分j 。所以無論j是什麼,它的價值超出了你的數組範圍。您需要將j更改爲k。你也可以改變你的for循環做快速迭代,在這種情況下,你可以消除k變量,並且你不會有這樣的混淆。

+0

嗨!謝謝你的回答,但這是正確的錯誤...:/ – Que20

+0

哦,我很抱歉,你是對的!我感覺很愚蠢! – Que20

1

什麼@Gavin說是100%正確的..但一點小費的未來..

for (NSString *stringInArray in myArray) 
{ 
    NSLog(@"%@", stringInArray); 
} 

上面的代碼片段是一個更好一點的工作。

或者,如果你感覺真的很勇敢,結賬enumerateObjectsUsingBlock: