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?

CCNA 1 Final Exam 2011 latest (hot hot hot)

  Hi! I have been posted content of ccna1 final exam (latest and only question.) I will post the answer and insert image on sunday. If you care, please subscribe your email an become a first person have full test content. Subcribe now  Some question  have not content because this question have images content. So that can you wait for me? SUNDAY 1. A user sees the command prompt: Router(config-if)# . What task can be performed at this mode? Reload the device. Perform basic tests. Configure individual interfaces. Configure individual terminal lines. 2. Refer to the exhibit. Host A attempts to establish a TCP/IP session with host C. During this attempt, a frame was captured with the source MAC address 0050.7320.D632 and the destination MAC address 0030.8517.44C4. The packet inside the captured frame has an IP source address 192.168.7.5, and the destination IP address is 192.168.219.24. At which point in the network was this packet captured? leaving host A leaving ATL leaving...