iphone - Objective c 将 block 转换为选择器

标签 iphone c++ objective-c

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

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

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

但现在我正在将 obj-c 翻译为 c++。因此不支持 block 。我需要使用像这样的选择器:

 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。 还有其他方法吗?

最佳答案

您的 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 参数。

关于iphone - Objective c 将 block 转换为选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10532662/

相关文章:

c++ - 将 pop_front 实现为 std::vector 的快速方法

c++ - 数据库。错误 C2352 : illegal call of non-static member function

ios - 当电话进入休眠状态与最小化然后在 objective-c 中进入休眠状态时调用哪些方法

ios - NSDictionary获取对象列表中的属性- objective-c

iPhone:字体配置错误:无法加载默认配置文件

苹果手机 SDK :Can write data to plist on Simulator but can't do same thing at Device?

c++ - 从表中检索混合数据类型的模板化 get 方法

objective-c - 在 Cocoa 命令行程序中运行 NSRunLoop

ios - 如何在ios中使用ASL获取控制台日志?

objective-c - 未安装 Sim 卡弹出在调用功能中显示两次