"делает указатель из целого числа без приведения" в Cocos2D для iPhone - PullRequest
0 голосов
/ 06 сентября 2011

Я использую действие в cocos2D, которое вызывает метод и передает BOOL в качестве параметра.

Я получаю предупреждение: «Передача аргумента 3 из actionWithTarget: selector: data: 'делает указатель изцелое число без приведения "с этой строкой:

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:flipChar];

Я пробовал:

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:(BOOL)flipChar];

Мой метод выглядит так:

-(void) characterReaction:(id)sender data:(BOOL)flipChar {
    *code stuff inside*
}

Это все еще кажетсяработать нормально.Я просто раздражен предупреждением.Есть идеи?

Ответы [ 3 ]

5 голосов
/ 06 сентября 2011

Вам нужно будет обернуть вас flipChar в NSNumber, чтобы правильно передать его в качестве ссылки.При использовании селекторов вы не можете напрямую передавать примитивные типы.

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self
                              selector:@selector(characterReaction : data:) 
                                  data:[[NSNumber numberWithBool:flipChar] retain]];
...

-(void) characterReaction:(id)sender data:(NSNumber*)flipChar {
    BOOL fc = [flipChar boolValue];
    *code stuff inside*
    [flipChar release]; //Retained in call to CCCallFuncND
}

Редактировать: после краткого просмотра документации это выглядит так, как будто это void*.Поскольку void* может быть любым объектом, а не просто объектом Objective-C, вам, вероятно, потребуется вручную сохранить и освободить номер.Код выше обновлен.

0 голосов
/ 06 сентября 2011

Аргумент data: ожидает объект, а BOOL - простой тип значения.Чтобы эффективно передать BOOL, вам нужно создать объект, который затем будет преобразован обратно в BOOL как часть процесса вызова указанного селектора.Вам необходимо создать объект, который при преобразовании в BOOL содержит любое значение, указывающее YES, и это nil для NO.Вы можете создать NSNumber для YES:

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:(flipChar ? [NSNumber numberWithBool:YES] : nil)];

0 голосов
/ 06 сентября 2011

Проблема, с которой вы столкнулись, связана не с вашим методом characterReaction:data:, а с методом actionWithTarget:selector:data.

Вы передаете, как я полагаю, BOOL в качестве аргумента data:, но метод ожидает указатель (объявление имеет значение void *). Вы должны изменить свой метод, чтобы следовать этому. Попробуйте передать объект и заставить ваш метод принимать объект.

...