“'CCLayer'可能不会回应......”

时间:2012-02-07 02:38:10

标签: iphone ios cocos2d-iphone

使用cocos2d,这似乎出现在一些消息传递的情况下。我不得不承认,我不熟悉Objective-C,因为我正在阅读这本书,因为我写了一些代码。

对于熟悉cocos2d的人来说,你有一个CCLayer课程。就我而言,我有一个GameLayer,它有一些子图层,如下所示:

@interface GameLayer : CCLayer {  
  CCSprite *_background;
  CCPanZoomController *_controller;    
  CCLayer *_truckLayer;
}

然后我有一个特殊的initWithLayers方法来在此图层中添加我的子图层:

-(id)initWithLayers:(TruckLayer *)truck
{
if( (self=[super init])) {
    self.truckLayer = truck;
    .....
}

现在,如果我向self.truckLayer发送消息,我会在Xcode中收到以下警告:

'CCLayer' may not respond to 'getNextAvailableSpot'

一个例子可能就是这样:

CGPoint nextSpot = [self.truckLayer getNextAvailbleSpot];

所有这些代码编译并成功运行,所以我很好奇我在这里缺少什么?如果我在这里做错了什么,我不希望我的代码被这些代替。

2 个答案:

答案 0 :(得分:2)

这是因为您将*_truckLayer声明为CCLayer,但是在您init上将(TruckLayer *)truck指定给CCLayer* _truckLayer。所以CCLayer不知道getNextAvailableSpot方法,所以编译器会给你警告。

代码运行正常,因为_truckLayer指向正确的TruckLayer,它知道getNextAvailableSpot

只需更改您的声明,警告就会消失。

@interface GameLayer : CCLayer 
{  
    CCSprite *_background;
    CCPanZoomController *_controller;    
    CCLayer *_truckLayer;
}

@class TruckLayer;
@interface GameLayer : CCLayer 
{  
    CCSprite *_background;
    CCPanZoomController *_controller;    
    TruckLayer *_truckLayer;
}

答案 1 :(得分:1)

正如警告所说:编译器无法保证CCLayer有一个方法来处理getNextAvailableSpot消息。除非你以某种方式动态添加这种方法,或者有其他(非常好的)理由相信这种方法存在,这可能是一个问题。