Skip to main content

""CCLayer" may not respond to … ”



Playing with cocos2d and this seems to come up in some instances of message passing. I have to admit, I'm not well versed in Objective-C yet as I'm reading through the book as I write some code.





For people familiar with cocos2d, you have a CCLayer class. In my case, I have a GameLayer which has some children layers, like so:







@interface GameLayer : CCLayer {

CCSprite *_background;

CCPanZoomController *_controller;

CCLayer *_truckLayer;

}







I then have a special initWithLayers method to add my child layers within this layer:







-(id)initWithLayers:(TruckLayer *)truck

{

if( (self=[super init])) {

self.truckLayer = truck;

.....

}







Now if I ever send a message to self.truckLayer I get the following warning in Xcode:







'CCLayer' may not respond to 'getNextAvailableSpot'







An example might be doing something like so:







CGPoint nextSpot = [self.truckLayer getNextAvailbleSpot];







All this code compiles and runs successfully, so I'm curious as to what I am missing here? I don't want my code literred with these if I'm doing something wrong here.


Comments

  1. It's because your declare *_truckLayer as CCLayer, but on your init you assign (TruckLayer *)truck to your CCLayer* _truckLayer. So CCLayer doesn't know about getNextAvailableSpot method, so the compiler gives you warning.

    The code runs fine because _truckLayer is a pointing to correct TruckLayer, which knows about getNextAvailableSpot.

    Simply change your declaration and the warning will be gone.

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


    to

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

    ReplyDelete
  2. Just as the warning says: the compiler can't guarantee that CCLayer has a method to handle the getNextAvailableSpot message. Unless you've somehow added in such a method dynamically, or have some other (very good) reason to believe that this method is present, this is probably a problem.

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?