在Cocos2D for iPhone中“从没有强制转换的整数中生成指针”

时间:2011-09-06 19:32:42

标签: iphone methods cocos2d-iphone selector arguments

我在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 个答案:

答案 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