2010-12-15 13 views
70

私は文字列を使ってメソッドの名前を作成するメソッドを呼び出す方法があるかどうか疑問に思っています。Objective C動的に文字列を持つメソッドを呼び出す

私はこれを呼び出すためにloaddataの

-(void)loadData; 

というメソッドを持っている私は、通常

[self loadData]; 

のようにそれを呼ぶだろう。しかし、私は、例えば、文字列を動的に呼び出すことができるようにしたいです

NSString *methodName = [[NSString alloc] initWithString:@"loadData"]; 
[self methodName]; 

これは愚かな例ですが、私はあなたの意見を得ることを望みます。私は私のIPadアプリケーションのためにセットアップしているデータバインディングクラスにこれを使用しています。説明するのは難しいが、それを起動させるには文字列でメソッドを呼び出す方法を工夫する必要がある。

アイデア?

ありがとうございました

+1

+1は明確で簡単な質問です。 – Linuxmint

+0

呼び出すメソッドは、NSStringを返す関数です。 – IPadHackAndSlash

答えて

100

あなたはobjc_msgSend関数を使用することができます

SEL s = NSSelectorFromString(selectorName); 
[anObject performSelector:s]; 
+0

この場合、メソッドはNSStringの値を1つのケースで返します。私はLvalueが代入の左のオペランドとして必要であると言うエラーを受け取ります。これは私のコードです:SEL s = NSSelectorFromString(@ "getIDString"); [self text] = [boundEntity performSelector:s]; – IPadHackAndSlash

+0

[self text]とは何ですか、ここで値を代入すると、getIDStringが返されます。 – Ishu

+0

'[boundEntity performSelector:s]'は '[self text]'の型と一致しない型の値を返します。テキストのために@propertyを設定し、 '[self setText:[[boundEntity performSelector:s]]]'を呼び出す必要があると思います。 – shreyasva

11

ような何かを試すことができます。それは、2つのパラメータ、受信機およびそれに送信するセレクタをとります。

objc_msgSend(self, someSelector); 

あなたはNSSelectorFromStringを使用して、適切なセレクタにあなたの文字列をオンにする必要があります:

NSString *message = [self getSomeSelectorName]; 
objc_msgSend(self, message); 

方法はまた、変数を取ります引数の数を指定すると、任意の数の引数を指定してメッセージを送信できます。

NSString *message = [self getSomeSelectorNameWithManyArguments]; 
objc_msgSend(self, message, arg1, arg2, arg3, arg4); 
関連する問題