Iphone 当insertObject抛出错误时,如何在索引0处添加对象?
当第一个索引先前已删除时,如何将对象添加到索引0处的NSMutableArray<代码>插入对象不起作用: 由于未捕获的异常“NSRangeException”而终止应用程序,原因:'*-[\uu NSArrayM removeObjectAtIndex:]:索引2超出边界[0..1]' 当屏幕向右移动时,我移除数组的第一个索引(不再可见)并将其添加到右侧。但是如果我想回到左边,我必须添加以前删除的图像(现在在索引2中,但是图像是相同的,所以我只添加另一个图像并不重要)Iphone 当insertObject抛出错误时,如何在索引0处添加对象?,iphone,objective-c,nsmutablearray,Iphone,Objective C,Nsmutablearray,当第一个索引先前已删除时,如何将对象添加到索引0处的NSMutableArray插入对象不起作用: 由于未捕获的异常“NSRangeException”而终止应用程序,原因:'*-[\uu NSArrayM removeObjectAtIndex:]:索引2超出边界[0..1]' 当屏幕向右移动时,我移除数组的第一个索引(不再可见)并将其添加到右侧。但是如果我想回到左边,我必须添加以前删除的图像(现在在索引2中,但是图像是相同的,所以我只添加另一个图像并不重要)addObject在数组末尾添加一
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;
}
如果你仔细阅读一下这个例外,谢谢 由于未捕获异常“NSRangeException”而终止应用程序,原因: “*-[\uu nsarray删除对象索引:]:索引2超出范围[0..1]” 你会发现这实际上是在你提到的那个之前发生的一次撞车。这行很好:
[sprites insertObject:temp atIndex:0];//CRASH HERE****
它是前一个崩溃的:
[sprites removeObjectAtIndex:2];
看起来您有一个包含两个项目(索引0和1)的数组,因此删除索引2会崩溃,因为没有索引2。您在前面的行中崩溃,尝试在索引2处操作对象。错误消息清楚地表明您正在尝试从索引2中删除对象。在您发布的代码中,这样做的唯一位置是行
[sprites removeObjectAtIndex:2];
您的精灵
数组没有您想象的那么多对象
您始终可以将插入到
NSMutableArray
的索引0中;它适用于空数组或具有任意数量对象的数组。请记住,initWithObjects以nil结尾,这意味着方法遇到的第一个nil将是列表中的最后一个。根据您发布的代码,我的直觉是lines3为零,导致列表大小为2,这将导致
[sprites removeObjectAtIndex:2];
失败并显示您发布的错误消息。使用调试器检查并验证行1、行2和行3是否为零我相信您弄错了。您的错误消息强烈表明您在前一行上崩溃。事实上,即使数组为空,您也可以始终在索引0处插入对象。您是否确实验证过它在insertObject行处崩溃?您发布的输出看起来像是上面的一行(removeObjectAt)是有问题的一行……虽然这是一个好的、有时会被忽略的点,但这是两个完全不同的数组--
sprites
和linesArray
。我的错,他在发布的代码中实际上没有使用linesArray,因此包含它有点奇怪。