2013-03-10 48 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