iPad App崩溃与NSInvalidArgumentException

时间:2011-06-30 02:50:31

标签: objective-c ios xcode

我正在尝试制作我的第一个cocos2d,chipmunk ipad app

我在我的.h文件中设置了一个“球”精灵,如下所示:

 // HelloWorld Layer 
 @interface
 HelloWorld : CCLayer {     
    cpSpace  *space;
    CCSprite *ball;     
 }

我正在这样移动它(一触即发):

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    for( UITouch *touch in touches ) {
        CGPoint location = [touch locationInView: [touch view]];

        location = [[CCDirector sharedDirector] convertToGL: location];         

        // Determine speed of the target
        int minDuration = 2.0;
        int maxDuration = 4.0;
        int rangeDuration = maxDuration - minDuration;
        int actualDuration = (arc4random() % rangeDuration) + minDuration;

        // Create the actions
        id actionMove = [CCMoveTo actionWithDuration:actualDuration 
                                            position:ccp(location.x, location.y)];
        id actionMoveDone = [CCCallFuncN actionWithTarget:self 
                                                 selector:@selector(spriteMoveFinished:)];
        [ball runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];

        [ball retain]; 
    }
}

当我使用调试器运行时,我得到了这个:

2011-06-29 20:44:04.121 ballgame[3499:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[HelloWorld spriteMoveFinished:]: unrecognized selector sent to instance 0x605a3e0'

它似乎适用于几个触摸,然后它似乎崩溃,所以也许它的内存泄漏?任何建议或建议都会有所帮助,这就像我的第一个应用程序。

干杯!

3 个答案:

答案 0 :(得分:4)

您正在调用spriteMoveFinished:对象上不存在的方法(HelloWorld)。你有spriteMoveFinished:方法吗?

'无法识别的选择器已发送'=调用不存在的方法。

答案 1 :(得分:2)

您是否尝试过调试应用?根据你的崩溃日志尝试NSZombie你的一个对象被释放,你在其上调用了一个函数。在您的环境标志中尝试NSZombieEnable。

答案 2 :(得分:2)

您定义了spriteMoveFinished:方法吗?如果没有,请定义它。如果它已经存在,那么你的HelloWorld对象可能还没有保留在任何地方。