2012-08-13 10 views
-1

如何在索引爲0的情況下將對象添加到NSMutableArray,此時刪除了第一個索引? insertObject不起作用:如何在indexObject引發錯誤時在索引0處添加對象?

終止應用程序由於未捕獲的異常 'NSRangeException',原因: '* - [__ NSArrayM removeObjectAtIndex:]:索引2超出範圍[0..1]'

當屏幕向右移動時,我刪除數組的第一個索引(不再可見),並將其添加到右側。但是,如果我想要回到左側,我必須添加先前刪除的圖像(現在在索引2,但圖像是相同的,所以它沒關係,如果我只是添加另一個圖像)。 addObject在數組的末尾添加一個對象,並且insertObject會引發錯誤...

您是否知道解決此問題的方法?

linesArray = [[NSMutableArray alloc] initWithObjects:lines1, lines2, lines3, nil]; 

//left direction : add the object at index 0 
if (offsetParam >= offset1){ 
    CCSprite *temp = [[sprites objectAtIndex:1] retain]; 
    [sprites removeObjectAtIndex:2]; 
    [sprites insertObject:temp atIndex:0];//****CRASH HERE**** 
    temp.position = ccp(-offset1-spriteWidth, temp.position.y); 
    [temp release]; 
    offset1 += spriteWidth; 
} 

感謝

+1

我相信你錯了。您的錯誤消息強烈表明您在前一行中崩潰。實際上,即使數組爲空,您也可以在索引0處插入一個對象。 – 2012-08-13 05:17:58

+0

您是否真的驗證過它在insertObject行崩潰?你發佈的輸出看起來像上面的行(removeObjectAt)是有問題的... – user439407 2012-08-13 05:18:02

+0

感謝您的回答 – Paul 2012-08-13 06:07:04

回答

1

如果你看的異常有點接近

終止應用程序由於未捕獲的異常 'NSRangeException',原因是: 「* - [__ NSArrayM removeObjectAtIndex:]:索引2越界[0..1]'

你會發現它'事實上,在你提到的那個之前,它就是在線上的崩潰。這條線路是好的:

[sprites insertObject:temp atIndex:0];//CRASH HERE**** 

它前面的一個崩潰:

[sprites removeObjectAtIndex:2]; 

看起來你有2項的數組(索引0和1),以便消除指數2個崩潰,因爲有是沒有索引2.

+0

感謝您的回答 – Paul 2012-08-13 06:05:17

1

你崩潰的行之前,你嘗試操縱對象在索引2.錯誤消息明確指出,你試圖刪除一個對象,並從索引2。只有你在你發佈的代碼中做到這一點的行是

[sprites removeObjectAtIndex:2]; 

您的sprites陣列沒有您認爲的那麼多的對象。

你可以總是插入NSMutableArray的索引0;它適用於空數組或具有任意數量對象的數組。

+0

感謝您的答案 – Paul 2012-08-13 06:06:42

-1

請記住,initWithObjects是零終止的,這意味着該方法遇到的第一個零將是列表中的最後一個。根據您發佈的代碼,我的直覺是,lines3爲零,導致您的列表是大小爲2,這將導致

[sprites removeObjectAtIndex:2]; 

失敗,您發佈的錯誤信息。用調試器檢查並確認lines1,lines2和line3不是零

+1

雖然這是一個很好的,有時被忽視的一點,那些是兩個完全不同的數組 - 「sprites」和「linesArray」。 – 2012-08-13 05:28:06

+0

我的不好,他實際上並沒有在他發佈的代碼中使用linesArray,有點奇怪,然後包含它。 – user439407 2012-08-13 05:33:11

相關問題