2012-02-07 52 views
0

玩過cocos2d,這似乎是在消息傳遞的某些情況下出現的。我不得不承認,我並不熟悉Objective-C,但是當我在閱讀本書時正在編寫一些代碼。「'CCLayer'可能不會迴應......」

對於熟悉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

這是因爲你的聲明*_truckLayerCCLayer,但你init分配(TruckLayer *)truckCCLayer* _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; 
} 
+0

就是這樣,謝謝你的解釋! – Bartek 2012-02-07 03:03:10

1

正如警告所說:編譯器不能保證CCLayer有一個方法來處理getNextAvailableSpot消息。除非你以某種方式動態地添加了這種方法,或者有其他(非常好的)理由相信這種方法存在,否則這可能是一個問題。

+0

的方法的TruckLayer類中存在以及它的頭文件 – Bartek 2012-02-07 02:50:16

+0

是TruckLayer CCLayer的子類?那可能是這個問題,那麼:truckLayer被聲明爲一個CCLayer,這(我猜)沒有這個方法。 – 2012-02-07 02:54:06

+0

解決了謝謝X斜線,但有一個upvote :) – Bartek 2012-02-07 03:04:17