2012-05-10 10 views
2

メニューをクリックすると、次のブロックが呼び出されます。目的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))); 

しかし、私は、パラメータを渡すことはできませんよ。私のようなセレクタを使用する必要がありますか?

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

が、それでも、私はどちらか@selectorに任意のパラメータを渡すことができません:あなたは、C++を使用しない場合には

は、セレクタののObj-Cのバージョンがあります。 他の方法はありますか?

答えて

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は2つのNSNumberパラメータを持つように定義する必要があります。

+0

メソッドはどのように渡されますか?署名やコードの例を提供できますか?私はちょうど整数とboolを渡すことができますか? – OMGPOP

+0

@OMGPOP私は自分の答えを編集しました。 –

関連する問題