Вызов метода класса для параметра класса - PullRequest
2 голосов
/ 20 января 2011

Мне нужно вызвать метод класса для запуска сцены Cocos2D. У меня есть игровой контроллер, в котором я буду переходить в разные состояния (или слои для тех, кто знаком с Cocos2D). Смотрите код ниже:

-(void)startGameWithState:(Class)s {
    [[CCDirector sharedDirector] runWithScene: [s scene]];
}

Дело в том, что это работает нормально, но выдает следующее предупреждение:

No '+scene' method found

Как можно лучше, я хочу избежать предупреждений, так как мне это исправить?

Обновление: это то, что я сделал.

-(void)changeStateTo:(Class <GameState>)s {
    [[CCDirector sharedDirector] runWithScene: [s scene]];
}

Поскольку протокол GameState определяет метод + scene, я не получаю никаких предупреждений.

Ответы [ 3 ]

2 голосов
/ 20 января 2011

По сути, просто объявите протокол или абстрактный класс с помощью метода класса scene, чтобы компилятор знал, что он существует.

0 голосов
/ 20 января 2011

Если вы всегда будете проходить конкретный класс, напишите

-(void)startGameWithState:(ConcreteClass*)s

Если вы будете использовать разные классы без какой-либо иерархии между ними, используйте id, чтобы избежать предупреждения

-(void)startGameWithState:(id)s

Второй метод не очень хорош, потому что если вы передадите неправильный объект класса этому методу, вы получите ошибку во время выполнения. Но в состоянии компиляции все будет хорошо

Если вы знаете, что каждый переданный класс будет производным от некоторого базового класса с методом +(id) scene, тогда передайте базовый класс:

-(void)startGameWithState:(BaseClass*)s
0 голосов
/ 20 января 2011

Это говорит о том, что ваш универсальный тип - Class - не имеет метода с именем scene. Если вы переходите в состояния / слои, они должны быть какого-то реального класса, верно? Вам нужно сообщить компилятору, какой класс s на самом деле есть, чтобы он мог найти в нем метод scene.

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