0

私は開発にcocos2dを使用しています。カスタマイズされたボタンクラスをラップしようとしました。ボタンに割り当てたセレクターに応答させるために、NSInvocationを使用しました。その中で、MyButtonはこのように機能します。

if( target && sel ) {
            sig = [target methodSignatureForSelector:sel];
            invocation_ = nil;
            invocation_ = [NSInvocation invocationWithMethodSignature:sig];
            [invocation_ setTarget:target];
            [invocation_ setSelector:sel];
            [invocation_ setArgument:&self atIndex:2];
            [invocation_ retain];
        }

私はselに次のような関数を渡しました:

- (void)onButtonClicked:(id)sender;

[invocation_ setArgument:&self atIndex:2];私の質問は、MyButtonの実装にこの行を追加する必要があるかどうかです。

私がこの質問をしているのは、ここのiosドキュメントによると: NSInvocationクラスリファレンス

それはそれに対処しました:

インデックス0と1は、それぞれ非表示の引数selfと_cmdを示します。これらの値は、setTarget:メソッドとsetSelector:メソッドを使用して直接設定する必要があります。メッセージで通常渡される引数には、インデックス2以上を使用します。

setTargetを呼び出すときにselfが渡されたようですが、setArgumentメソッドで&self引数を渡す必要がないということですか?

ありがとう

4

1 に答える 1

0

ドキュメントには、最初の引数(インデックス0)がターゲットオブジェクト(つまり「自己」)を表すと書かれているだけです。ドキュメントで説明されているように、最初の引数はsetTarget:メソッドを使用して設定されます。

[invocation_ setArgument:&self atIndex:2];ボタンの参照をターゲットとアクションのペアに送信するには、このコード行を保持する必要があります。

于 2012-07-26T08:02:31.253 に答える