我在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*
}
它似乎仍然可以正常工作。我对这个警告感到恼火。有什么想法吗?
答案 0 :(得分:5)
您需要将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对象,因此您可能需要手动保留和释放该数字。上面的代码已更新。
答案 1 :(得分:0)
您遇到的问题与characterReaction:data:
方法无关,而是与actionWithTarget:selector:data
方法有关。
你传递的是一个BOOL作为data:
参数,但该方法需要一个指针(声明为void *
)。您应该更改您的方法以遵循该方法。尝试传入一个对象,并让你的方法接受一个对象。
答案 2 :(得分:0)
data:
arg需要一个对象,BOOL
是一个简单的值类型。要有效地传递BOOL
,您需要创建一个对象,然后在调用您指定的选择器的过程中将其转换回BOOL
。您需要创建一个对象,当转换为BOOL
时,该对象包含指示YES
的任何值,以及nil
的{{1}}。您可以为NO
:
NSNumber
YES