NSInvalidArgumentException异常原因:+;[游戏场景集成器]

NSInvalidArgumentException异常原因:+;[游戏场景集成器],exception,ios5,cocos2d-iphone,Exception,Ios5,Cocos2d Iphone,当我尝试创建一个新层时,会出现这种异常。所以,基本上我有一个标准的cocos2d模板,我刚刚删除了HelloWorldLayer类并创建了一个名为GameSecene的新类,我定义了+scene方法、init和dealoc方法 游戏场景 #import "cocos2d.h" @interface GameScene : CCLayer {} +(id) scene; @end 游戏场景 #import "GameScene.h" @implementation GameScene

当我尝试创建一个新层时,会出现这种异常。所以,基本上我有一个标准的cocos2d模板,我刚刚删除了HelloWorldLayer类并创建了一个名为GameSecene的新类,我定义了
+scene
方法、
init
dealoc
方法

游戏场景

#import "cocos2d.h"

@interface GameScene : CCLayer {}

+(id) scene;

@end
游戏场景

#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,而不是旧层,从游戏场景创建新层

- (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'

我知道了。方法
+场景
不返回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类型。

我不确定您在这里试图实现什么,但在您的+(id)场景创建者中,您不应该返回自我

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

它是一个类方法:+(id),而不是一个实例方法-(id)。