在类参数上调用类方法

时间:2011-01-20 06:11:27

标签: objective-c cocos2d-iphone

我需要调用一个类方法来运行Cocos2D场景。我有一个游戏控制器,我将在其中传递不同的状态(或熟悉Cocos2D的那些层)。请参阅以下代码:

-(void)startGameWithState:(Class)s {
    [[CCDirector sharedDirector] runWithScene: [s scene]];
}

问题是,这工作正常,但会产生以下警告:

No '+scene' method found

尽可能地,我想避免发出警告,以便如何解决这个问题?

更新:这就是我所做的。

-(void)changeStateTo:(Class <GameState>)s {
    [[CCDirector sharedDirector] runWithScene: [s scene]];
}

通过让GameState协议定义+场景方法,我不会收到任何警告。

3 个答案:

答案 0 :(得分:2)

基本上,只需使用scene类方法声明协议或抽象类,以便编译器知道它存在。

答案 1 :(得分:0)

它告诉您,您的通用类型 - Class - 没有名为scene的方法。如果你在州/层中传递,那些必须是某些实际的类,对吧?您需要告诉编译器实际上是什么类s,以便它可以在其中找到scene方法。

答案 2 :(得分:-2)

如果你总是传递具体的类写

-(void)startGameWithState:(ConcreteClass*)s

如果您将使用不同的类而不使用任何层次结构,请使用id来避免警告

-(void)startGameWithState:(id)s

第二种方法不是很好,因为如果你将错误的类对象传递给这个方法,你将会遇到运行时错误。但是在编译状态下一切都会好起来

如果您知道传递的每个类都将使用+(id) scene方法从某个基类派生,那么传递基类:

-(void)startGameWithState:(BaseClass*)s