objective c将块转换为选择器

时间:2012-05-10 11:03:20

标签: iphone c++ objective-c

单击菜单时将调用以下块。

CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon 
                                          selectedSprite:icon2 
                                          block:^(id sender) {
    [self buttonClickedWithUnlocked:unlocked world:world];
}];

我可以将参数传递给块内的方法。

但现在我正在将obj-c翻译成c ++。因此不支持阻止。我需要使用选择器,如:

 CCMenuItem* iconItem = 
 CCMenuItemSprite::itemFromNormalSprite(icon, icon2, this,              
 menu_selector(SomeClass::buttonClickedWithUnlockedWorld(unlocked, w)));

但我无法传入参数(选择器不支持) 有没有其他方法可以做到这一点?

如果您不使用c ++,Obj-c版本的选择器是:

CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon 
                                          selectedSprite:icon2 
                                          target: self
                                          selector: @selector(buttonClickedWithUnlocked)
}];

但是,我仍然无法将任何参数传递给@selector。 还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

您的obj-c版本应该是selector: @selector(buttonClickedWithUnlocked::)而不是selector: @selector(buttonClickedWithUnlocked)(请注意::)。因此,对于您的C ++版本,您需要创建类似[target performSelector:selector withObject:obj1 withObject:obj2]的内容。

所以在Obj-C中它看起来像这样:

CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon 
                                      selectedSprite:icon2 
                                      target: self
                                      selector: @selector(buttonClickedWithUnlocked::)
                                      param1: [NSNumber numberWithInt:unlocked]
                                      param2: [NSNumber numberWithBool:w]
}];
必须将

buttonClickedWithUnlocked定义为具有两个NSNumber参数。