Функция выбора с параметром int? - PullRequest
4 голосов
/ 05 сентября 2011

Использование Cocos2d-iphone и каркаса для разработки игр target-c.

Я создаю кнопку с:

CCMenuItemImage *slot = [CCMenuItemImage itemFromNormalImage:@"BattleMoveSelectionSlot1.png" 
                                                       selectedImage:@"BattleMoveSelectionSlot2.png"
                                                              target:self selector:@selector(moveChosen:i)];

И мой moveChosen метод:

-(void)moveChosen:(int)index {

}

Однако по какой-то причине я получаю сообщение об ошибке @selector(moveChosen:i), где i - целое число. Как тогда я могу передать целочисленный параметр моей функции при нажатии кнопки?

Ошибка

Ожидаемый ':'

Ответы [ 4 ]

4 голосов
/ 05 сентября 2011

Георг прав. Обратите внимание, что при реализации это вызовет неопределенное поведение, так как index является int, но метод действия, который он использует, ожидает объект (id), а не int. Подпись метода действия:

- (void)methodName:(id)sender;

Или, при использовании с Интерфейсным Разработчиком:

- (IBAction)methodName:(id)sender;

(IBAction - псевдоним void. Оба семантически различны, но функционально идентичны.)

Где sender - это объект, который отправил сообщение действия - в данном случае это объект, который вы создали и присвоили переменной slot.

4 голосов
/ 05 сентября 2011

Вы не включаете имена аргументов в селектор:

@selector(moveChosen:)

Селекторы не допускают привязки параметров.

2 голосов
/ 05 сентября 2011

Георг частично прав. Для вашего примера это будет:

@selector(moveChosen:)

Но обратите внимание: если у вас более одного параметра, вы включаете формальные имена параметров, чтобы получить селектор. Если ваша функция подписи была:

- (void)moveChosen:(int)index withThing:(Thing*)thing

тогда селектор будет:

@selector(moveChosen:withThing:)
1 голос
/ 05 сентября 2011

Селектор - это просто имя сообщения, которое вы хотите отправить. Аргументы будут предоставлены при его вызове - это означает, что CCMenuItemImage решит, какой аргумент будет передан. Если CCMenuItemImage не поддерживает предоставление целочисленного параметра, вы не можете сделать это.

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