如果先前删除了第一个索引,我们如何在索引0处将对象添加到NSMutableArray? insertObject
不起作用:
由于未捕获的异常'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;
}
由于
答案 0 :(得分:1)
如果你仔细阅读那个例外
由于未捕获的异常'NSRangeException'而终止应用程序,原因: '* - [__ NSArrayM removeObjectAtIndex:]:索引2超出边界[0 .. 1]'
你会发现它实际上是你提到的那条线之前的线路上的崩溃。这条线很好:
[sprites insertObject:temp atIndex:0];//CRASH HERE****
前一个崩溃:
[sprites removeObjectAtIndex:2];
看起来你有一个包含2个项目的数组(索引0和1),因此删除索引2会因为没有索引2而崩溃。
答案 1 :(得分:1)
你之前崩溃,在那里你试图操纵索引2处的对象。错误消息清楚地表明你正在尝试删除一个对象,并从索引2中删除。唯一的地方就是您发布的代码是
行[sprites removeObjectAtIndex:2];
您的sprites
数组没有您想象的那么多对象。
您可以始终插入NSMutableArray
的索引0;它适用于空数组或具有任意数量对象的数组。
答案 2 :(得分:-1)
请记住,initWithObjects是nil终止的,这意味着方法遇到的第一个nil将是列表中的最后一个。根据您发布的代码,我的预感是lines3为零,导致您的列表大小为2,这将导致
[sprites removeObjectAtIndex:2];
失败并显示您发布的错误消息。检查调试器并验证lines1,lines2和lines3不是nil