NSMutableArray删除objectAtIndex NSRangeException IOS

时间:2012-11-26 21:13:50

标签: ios cocos2d-iphone nsmutablearray nsrangeexception

我尝试NSRangeException时出现removeObjectAt:0错误。我不知道怎么可能。

-(void)removePoints:(ccTime *)tm
{

    NSLog(@"naughty %@",_naughtytoucharray);
    if ([_naughtytoucharray count]>0)
    {
        [_naughtytoucharray removeObjectAtIndex:0];
    }
}

显示日志:

[4195:c07] naughty ( "{124, 98}", "{123, 98}", "{135, 97}", "{124, 98}", "{148, 94}", "{135, 97}", "{157, 93}", "{148, 94}", "{162, 92}", "{157, 93}", "{164, 92}", "{162, 92}" )

然后我收到以下错误: *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 11 beyond bounds [0 .. 10]'

当我设置断点时,我看到所有对象都是0x0

enter image description here

NSMutableArray已在init中分配并初始化,并填入ccTouchesMoved

-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event  {


    if (isSelected) {

        UITouch *touch = [ touches anyObject];
        CGPoint new_location = [touch locationInView: [touch view]];
        new_location = [[CCDirector sharedDirector] convertToGL:new_location];


        CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
        oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
        oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];

        // add my touches to the naughty touch array
        [_naughtytoucharray addObject:NSStringFromCGPoint(new_location)];
        [_naughtytoucharray addObject:NSStringFromCGPoint(oldTouchLocation)];

    }
}

知道为什么我不能删除数组的第一项吗?

1 个答案:

答案 0 :(得分:5)

这不是你的错误来自哪里。它抱怨的方法是objectAtIndex:,而不是removeObjectAtIndex:,导致错误的索引是11,而不是零。

在代码中查找一个位置,假设在读取数组时,数组中至少有12个对象。只有11个,它们的索引是0到10。