2014-02-16 168 views
1

我想我會爲一些簡單的事情而生氣。NSArray索引超越界限

以下代碼:

 NSLog(@"potentialPositions: %@, with count: %i", potentialPositions, [potentialPositions count]); 

    for (NSUInteger i = 1; i < (choices); i++) { 
     NSLog(@"i = %i",i); 
     [self drawAWord:[[currentLevel objectAtIndex:levelLink] objectAtIndex:i] atPoint:[[potentialPositions objectAtIndex:i] CGPointValue] withInitialZoom:FALSE]; 
    } 

產生以下結果:

2014-02-15 20:31:54.329 ThesaurusLinks[12446:70b] potentialPositions: (
"NSPoint: {180, 125}", 
"NSPoint: {270, 200}", 
"NSPoint: {350, 250}", 
"NSPoint: {280, 160}" 
), with count: 4 
2014-02-15 20:31:54.330 ThesaurusLinks[12446:70b] i = 1 
2014-02-15 20:31:54.331 ThesaurusLinks[12446:70b] i = 2 
2014-02-15 20:31:54.331 ThesaurusLinks[12446:70b] i = 3 
2014-02-15 20:31:54.334 ThesaurusLinks[12446:70b] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2]' 

顯然有稱爲 「potentialPositions」 陣列中的四個對象。爲什麼它認爲界限只有0..2?它不能在我的DrawAWord方法中,因爲我放了一個NSLOG(結果沒有在上面顯示),它沒有被調用,因爲我= 3.我很難過。

感謝您的任何答案或提示。

+0

[currentLevel objectAtIndex:levelLink] objectAtIndex:i]怎麼樣 - 可能這是崩潰的原因。將其分成兩行以進行更好的調試。 –

+0

你是對的。問題在於另一個數組,當我真的打算使用具有不同索引的數組時,我試圖對兩者都使用i太棘手。謝謝 – Narwhal

回答

1

你想在0開始:

for (NSUInteger i = 0; i < (choices); i++) 
+0

我明白了,但我有一個特別的理由,在這一點上舍棄0。這部分代碼填充了不正確的選項。對象0被保留用於正確答案的位置。我仍然不知道爲什麼它認爲界限是0..2。 – Narwhal

+0

噢,我看,看起來像[currentLevel objectAtIndex:levelLink]可能是問題嗎?什麼是levelLink的計數? – Chicken

+0

Nvm,現在已經回答了。 – Chicken

2

什麼

[currentLevel objectAtIndex:levelLink] 

回報?看來問題在這裏。添加

NSLog(@"%@",[currentLevel objectAtIndex:levelLink]); 

查看它有多少個元素。