"CCLayer" может не отвечать на ... " - PullRequest
0 голосов
/ 07 февраля 2012

Игра с 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 ]

2 голосов
/ 07 февраля 2012

Это потому, что вы объявляете *_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 голос
/ 07 февраля 2012

Как и в предупреждении: компилятор не может гарантировать, что у CCLayer есть метод для обработки сообщения getNextAvailableSpot.Если вы каким-либо образом не добавили такой метод динамически или у вас нет другой (очень веской) причины полагать, что этот метод присутствует, это, вероятно, проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...