Сбой приложения iPad с NSInvalidArgumentException - PullRequest
0 голосов
/ 30 июня 2011

Я пытаюсь сделать свое первое приложение cocos2d, chipmunk ipad

Я установил спрайт "ball" в своем файле .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 ]

4 голосов
/ 30 июня 2011

Вы вызываете метод (spriteMoveFinished:) для вашего HelloWorld объекта, который не существует. Вы сделали spriteMoveFinished: метод?

«Неопознанный селектор отправлен» = вызов метода, которого там нет.

2 голосов
/ 30 июня 2011

Вы определили метод spriteMoveFinished:?Если нет, определите это.Если это уже так, то ваш объект HelloWorld, вероятно, нигде не был сохранен.

2 голосов
/ 30 июня 2011

Вы пытались отладить свое приложение? Попробуйте NSZombie также в соответствии с вашим журналом сбоя, один из ваших объектов был освобожден, и вы вызвали функцию для этого. Попробуйте NSZombieEnable в вашей среде флага.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...