Исключение NSInvalidArgumentException по причине: + [GameScene onEnter] - PullRequest
1 голос
/ 06 февраля 2012

Я получаю это исключение, когда пытаюсь создать новый слой.Итак, в основном у меня есть стандартный шаблон cocos2d, я просто удалил класс HelloWorldLayer и создал новый класс под названием GameScene, где я определил +scene метод, init и dealloc методы

GameScene.h

#import "cocos2d.h"

@interface GameScene : CCLayer {}

+(id) scene;

@end

GameScene.m

#import "GameScene.h"

@implementation GameScene 

    +(id) scene {

        CCScene *scene = [CCScene node];
        GameScene *layer = [GameScene node];

        [scene addChild:layer];
        return self;
    }

    -(id) init {

        if ((self = [super init])) {

            CCLOG(@"New GameScene");
        }

        return self;
    }

    -(void) dealloc {

        [super dealloc];
    }

    @end

В моем appDelegate вместо старого слоя создайте новый из GameScene

- (void) applicationDidFinishLaunching:(UIApplication*)application
{
    …

    // Run the intro Scene
    [[CCDirector sharedDirector] runWithScene: [GameScene scene]];
}

Вывод на консоль показывает:

2012-02-06 20:37:04.284 Doodle[3908:10a03] +[GameScene onEnter]: unrecognized selector sent to class 0x1098c4
2012-02-06 20:37:04.288 Doodle[3908:10a03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[GameScene onEnter]: unrecognized selector sent to class 0x1098c4'

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Я понял это. Вместо того, чтобы возвращать тип идентификатора для метода +scene, это должно быть значение CCScene.

// in header also modify type of returned value


    +(CCScene *) scene {

            CCScene *scene = [CCScene node];
            GameScene *layer = [GameScene node];

            [scene addChild:layer];
            return self;
        }

Я все еще не понимаю, почему id не работает, потому что это может быть любой тип, даже тип CCScene.

0 голосов
/ 06 февраля 2012

Я не уверен, что вы пытаетесь достичь здесь, но в вашем + (id) создателе сцены, вы не должны возвращать себя.

Попробуйте [автозапуск сцены]; (если это то, что вы действительно хотите).

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