NSInvalidArgumentException异常原因:+ [GameScene onEnter]

时间:2012-02-06 19:03:11

标签: exception ios5 cocos2d-iphone

我尝试创建新图层时遇到此异常。所以,基本上我有一个标准的cocos2d模板,我刚刚删除了HelloWorldLayer类并创建了一个名为GameScene的新类,我定义了+scene方法,initdealloc方法

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 个答案:

答案 0 :(得分:2)

我明白了。它不是返回方法+scene的ID类型,而应该是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类型。

答案 1 :(得分:0)

我不确定你要在这里完成什么,但是在你的+(id)场景创作者中,你不应该回归自我。

尝试[场景自动释放]; (如果那就是你真正想要的)。