2011-06-10 29 views
6

目的関数cの中でNSString *という名前のセレクターを呼び出すにはどうすればよいですか?私はまた、ターゲットがそれを受け入れる場合にのみセレクターを呼び出す必要があります。例えばObjective-Cの動的メソッド呼び出し

+(void) callMethod: (NSString *) method onObject: (id) object 
{ 
    // do some magic 
} 

私はcallMethod: @"Foo" onObject: objobjかの実装を呼び出すとFooその後、[obj Foo]はそれを実装していない場合、何も起こらないはず、と呼ばれるべきです。

答えて

15
SEL selector = NSSelectorFromString(method); 
if ([object respondsToSelector:selector]) { 
    [object performSelector:selector]; 
} 
6

まず、あなたがそうのように、メソッド名に文字列を変換するNSSelectorFromString()メソッドを使用します。次に

SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);

を、あなたは、受信機での方法をチェックし、あればメソッドを呼び出します存在する:

if ([receiver respondsToSelector:methodToCall]) { 

    // Method exists, call it. 
    [receiver performSelector:methodToCall]; 

} 

潜在的な欠点は、引数を渡すことができないことです。引数を渡すには、NSObjectメソッドperformSelector:withObject:を呼び出します。 2つの引数を渡す場合は、performSelector:withObject:withObject:

関連する問題