Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 当insertObject抛出错误时,如何在索引0处添加对象?_Iphone_Objective C_Nsmutablearray - Fatal编程技术网

Iphone 当insertObject抛出错误时,如何在索引0处添加对象?

Iphone 当insertObject抛出错误时,如何在索引0处添加对象?,iphone,objective-c,nsmutablearray,Iphone,Objective C,Nsmutablearray,当第一个索引先前已删除时,如何将对象添加到索引0处的NSMutableArray插入对象不起作用: 由于未捕获的异常“NSRangeException”而终止应用程序,原因:'*-[\uu NSArrayM removeObjectAtIndex:]:索引2超出边界[0..1]' 当屏幕向右移动时,我移除数组的第一个索引(不再可见)并将其添加到右侧。但是如果我想回到左边,我必须添加以前删除的图像(现在在索引2中,但是图像是相同的,所以我只添加另一个图像并不重要)addObject在数组末尾添加一

当第一个索引先前已删除时,如何将对象添加到索引0处的NSMutableArray<代码>插入对象不起作用:

由于未捕获的异常“NSRangeException”而终止应用程序,原因:'*-[\uu 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;
}

如果你仔细阅读一下这个例外,谢谢

由于未捕获异常“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,因此包含它有点奇怪。