2011-09-06 47 views
0

我在cocos2D中使用一个操作调用一个方法,并传递一个BOOL作为参数。“使指针从整型没有演员阵营”在Cocos2D为iPhone

我得到警告: “传递的参数3 'actionWithTarget:选择:数据:' 使指针从整数,未作类型转换” 这一行:

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* 
} 

它仍然似乎很好地工作。我只是被警告所困扰。有任何想法吗?

回答

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对象,所以您可能需要手动保留并释放该数字。上面的代码已更新。

+0

谢谢你,伟大工程! – VagueExplanation

0

您遇到的问题与您的characterReaction:data:方法无关,而与actionWithTarget:selector:data方法无关。

您传递的是什么,我假设BOOL为data:参数,但该方法需要一个指针(声明的格式为void *)。你应该改变你的方法来遵循这一点。尝试传入一个对象,并让你的方法接受一个对象。

0

这个data: arg需要一个对象,而BOOL是一个简单的值类型。要有效地通过BOOL,您需要创建一个对象,然后将其作为调用您指定的选择器的过程的一部分转换回BOOL。您需要创建一个对象,该对象在转换为BOOL时包含任何值,以指示YES,对于NO则包含nil。您可以创建一个YESNSNumber

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