2013-03-10 81 views
2

我有一個for循環的問題 我把一個NSArray放入tableview中,我希望最後一個對象在第一個單元格中,但是它只能在第一個對象中使用,NSArray循環問題

這個工程:

for(int i = 0; i < messages.count ; i++) 
    { 
    } 

但這並不:

for(int i = messages.count; i > 0; i--) 
    { 
    } 

和錯誤消息是:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 203 beyond bounds [0 .. 202]' 
*** First throw call stack: 
(0x32bd33e7 0x3a8c4963 0x32b1eef9 0x891d3 0x34a01579 0x34a561f7 0x34a5613d 0x34a56021 0x34a55f4d 0x34a55699 0x34a55581 0x34a26561 0x349e58c7 0x34791513 0x347910b5 0x34791fd9 0x347919c3 0x347917d5 0x349eb93f 0x32ba8941 0x32ba6c39 0x32ba6f93 0x32b1a23d 0x32b1a0c9 0x366f833b 0x34a362b9 0x8549d 0x3acf1b20) 
libc++abi.dylib: terminate called throwing an exception 
+0

的for(int i = messages.count - 1; I> = 0 ; i--) - 數組從零開始 – VMAtm 2013-07-21 21:04:38

回答

4

你需要開始在該消息的循環計數-1所以這樣的:

for (int i = messages.count - 1; i >= 0; i--) 
{ 
    ... 
} 

由於messages.count將給消息中保存元素對象的總數。陣列中最大的元素索引將爲messages.count - 1,因爲數組索引從0開始。

+1

爲什麼這個答案被投票?一個人應該等待它可能是一個錯字錯誤,但概念是正確的 – 2013-03-10 16:06:06

0

半開區間。有沒有對象[array objectAtIndex:array.count]。例如,如果您的數組包含5個對象,則索引爲0,1,2,3和4時會有對象。

此外,在第二種情況下,計數器需要到0,否則,將第一個對象(索引0處的對象)考慮在內(再次:半開放間隔的閉合部分爲0,開放的部分爲array.count)。

總而言之:改變第二回路

for (int i = messages.count - 1; i >= 0; i--) 

,它會正常工作。

1

for(int i = 0; i < messages.count ; i++)0messages.count-1的循環(它在i == messages.count時停止)。

for(int i = messages.count; i > 0; i--)messages.count循環下降到1,這是一組完全不同的指數。

for(int i=messages.count-1; i>=0; i--) 

代替,或use this

int i = messages.count; 
while(i --> 0) { 
    ... 
} 

或只是使用reverseObjectEnumerator

for(id element in [messages reverseObjectEnumerator]) { 
    ... 
} 
+0

謝謝你的作品 – hannsch 2013-03-10 16:09:08