2011-09-04 66 views
4

使用Cocos2d-iphone和objective-c游戏开发框架。带int参数的选择器函数?

我创建一个按钮:

CCMenuItemImage *slot = [CCMenuItemImage itemFromNormalImage:@"BattleMoveSelectionSlot1.png" 
                 selectedImage:@"BattleMoveSelectionSlot2.png" 
                   target:self selector:@selector(moveChosen:i)]; 

而且我moveChosen方法是:

-(void)moveChosen:(int)index { 

} 

但是,由于某种原因,我得到@selector(moveChosen:i)错误,其中i为整数。那么,如何在按下按钮时将一个整型参数传递给我的函数呢?

的错误是

预期 ':'

+0

看到这个答案 http://stackoverflow.com/questions/7899223/how-can-i-pass- an-int-value-through-a-selector-method – umairhhhs

+0

http://stackoverflow.com/questions/7899223/how-can-i-pass-an-int-value-through-a-selector-method * *看到这个线程** – umairhhhs

回答

4

您不包括在选择任何参数名:

@selector(moveChosen:) 

选择器不允许参数绑定。

+0

所以我绝对不能传递参数? – Voldemort

+0

@Omega:不,你不能使用选择器绑定参数。通常情况下,行动得到的参数应该让你识别情况,参见Jonathans的回答。 –

4

Georg是正确的。请注意,在实施时,这会调用未定义的行为,因为indexint,但其使用的操作方法预计有一个对象(id),而不是int。的动作方法的签名是:

- (void)methodName:(id)sender; 

或者,与界面生成器一起使用时:

- (IBAction)methodName:(id)sender; 

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

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

1

选择器只是您要发送的消息的名称。参数将在调用时提供 - 这意味着CCMenuItemImage将决定传递哪个参数。如果CCMenuItemImage不支持提供整数参数,则不能这样做。

2

格奥尔格部分正确。对于你的榜样,那就是:

@selector(moveChosen:) 

但要注意:如果你有一个以上的参数,你就包括正式的参数名称来获得选择。如果你的函数签名是:

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

然后选择应该是:

@selector(moveChosen:withThing:) 
+1

我的意思是实际参数naems。你显示的是交错方法名称:[“对于具有多个参数的方法,Objective-C的方法名称与参数交错”](http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/的ObjectiveC /章节/ ocObjectsClasses.html#// apple_ref/DOC/UID/TP30001163-CH11-SW6)。 –