为什么一个类没有找到公开声明的方法?

时间:2013-06-18 16:39:39

标签: ios cocos2d-iphone

我在cocos2d中有一个游戏,它有一个Mole Class和一个调用它的Layer。 Mole类称之为:

-(void)gotHit {
    [self.parent processMoleHit];
}

而Layer已声明并实现此方法:

-(void) processMoleHit;


-(void) processMoleHit {
    currentScore++;
    [self setCurrentScore];
}

为什么cocos2d会给我警告:

未找到实例方法-processMoleHit(返回类型默认为id)。

这是parent的实现,层类:

//Interface
@interface Ch3_SavingDataPlist : SimpleTimedGameRecipe
{   
    NSMutableArray *moles;
    int tagCount;
    int moleCount;
    CCSprite *mallet;
    CGPoint malletPosition;
}

-(CCLayer*) runRecipe;
-(void) step;
-(void) initBackground;
-(void) createMoleAtPosition:(CGPoint)point withZ:(float)z;
-(void) processMoleHit;

-(void) addHiScoresToMenu;
-(void) loadHiScores;
-(void) addHiScore;
-(void) deleteHiScores;
-(void) startNewGame;
-(void) gameOver;
-(void) step:(ccTime)delta;
-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

@end

2 个答案:

答案 0 :(得分:1)

您缺少类型转换。通过以下方式替换您的代码:

-(void)gotHit {
    [(YOUR_LAYER_CLASS)self.parent processMoleHit];
}

答案 1 :(得分:0)

我认为您错过了将类Mole包含在XCode中的目标成员资格中。

要检查它,请选择XCode左侧的Mole Class .m,并验证是否在XCode右侧的目标成员资格下选中了目标复选框。如果没有,它可能会导致这个问题。