1

コードのある時点で、メソッドを文字列として参照しており、それらのターゲットがあります。たとえば、myObject というオブジェクトがあり、そこに次のような「doSomething:」というメソッドがあるとします。

- (void)doSomething:(id)sender {
   // do something baby
}

コードのある時点で、これを行うオブジェクトとメソッドの両方への参照を保存します。

NSString *myMethod = @"doSomething:";
id myTarget = myObject;

後で、コードの別のポイントでこれを行いたい

[myObject doSomething:self];

しかし、オブジェクトへの参照 ID とメソッドを表す NSString からそのオブジェクトへのメソッド呼び出しを再構築するにはどうすればよいですか?また、そのメソッドに self を渡すにはどうすればよいでしょうか?

ありがとう

4

2 に答える 2

3

文字列をセレクターに変換するには、 を使用しますNSSelectorFromString。逆に、 を使用しますNSStringFromSelector

セレクターを変換します。

SEL selector = NSSelectorFromString(methodSelectorString);

呼び出し方法:

[myObject performSelector:selector withObject:self afterDelay:0.0];

財団のリファレンスから;

NSSelectorFromString

指定された名前のセレクターを返します。

SEL NSSelectorFromString (
   NSString *aSelectorName
);

パラメーター

aSelectorName

セレクターの名前を表す、任意の長さと任意の文字の文字列。戻り値 aSelectorName によって指定されたセレクター。aSelectorName が nil の場合、または UTF-8 に変換できない場合 (これは単にメモリ不足が原因である必要があります)、(SEL)0 を返します。

説明 セレクターを作成するために、NSSelectorFromString は、aSelectorName の UTF-8 エンコード文字表現を sel_registerName に渡し、その関数によって返された値を返します。したがって、セレクターが存在しない場合は登録され、新しく登録されたセレクターが返されることに注意してください。

コロン (「:」) はメソッド名の一部であることを思い出してください。setHeight は setHeight: と同じではありません。メソッド名の詳細については、Objective-C プログラミング言語の「オブジェクト、クラス、およびメッセージング」を参照してください。


NSStringFromSelector

指定されたセレクターの文字列表現を返します。

NSString *NSStringFromSelector (
   SEL aSelector
);
于 2013-02-25T12:47:07.357 に答える
1

@Tillが言ったように、使用する必要がありますNSSelectorFromString()

次のコードを使用できます。

SEL selector = NSSelectorFromString(myMethod);
if(selector)
{
   [myObject performSelector:selector withObject:self];
}
于 2013-02-25T12:58:26.437 に答える