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

[韓日関係] 首相含む大幅な内閣改造の可能性…早ければ来月10日ごろ=韓国

div not scrolling properly with slimScroll plugin

I am using the slimScroll plugin for jQuery by Piotr Rochala Which is a great plugin for nice scrollbars on most browsers but I am stuck because I am using it for a chat box and whenever the user appends new text to the boxit does scroll using the .scrollTop() method however the plugin's scrollbar doesnt scroll with it and when the user wants to look though the chat history it will start scrolling from near the top. I have made a quick demo of my situation http://jsfiddle.net/DY9CT/2/ Does anyone know how to solve this problem?

Why does this javascript based printing cause Safari to refresh the page?

The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex