选择器函数与int参数?

时间:2011-09-04 21:12:16

标签: objective-c cocos2d-iphone

使用Cocos2d-iphone和objective-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 个答案:

答案 0 :(得分:4)

您不在选择器中包含任何参数名称:

@selector(moveChosen:)

选择器不允许绑定参数。

答案 1 :(得分:4)

格奥尔格是对的。请注意,在实现时,这将调用未定义的行为,因为indexint但是它正在使用的操作方法需要一个对象(id),而不是int 。行动方法的签名是:

- (void)methodName:(id)sender;

或者,当与Interface Builder一起使用时:

- (IBAction)methodName:(id)sender;

IBActionvoid的别名。两者在语义上不同但功能相同。)

其中sender是发送操作消息的对象 - 在本例中是您创建并分配给slot变量的对象。

答案 2 :(得分:2)

格奥尔格部分正确。对于您的示例,它将是:

@selector(moveChosen:)

但请注意:如果您有多个参数,则确实包含形式参数名称以获取选择器。如果你的功能签名是:

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

然后选择器将是:

@selector(moveChosen:withThing:)

答案 3 :(得分:1)

选择器只是您要发送的邮件的名称。参数将在调用时提供 - 这意味着CCMenuItemImage将决定传递的参数。如果CCMenuItemImage不支持提供整数参数,则无法执行此操作。