2011-06-22 15 views
2

私はクラスのメンバーは、私のViewControllerにUIImageViewを言うことができますしている場合:クラスメンバオブジェクトを文字列名で取得する方法は?

UIImageView* imageView = self.memberImageView1; 

は、私は文字列でこのメンバーを得ることができる方法はありますか?次のようなものがあります。

UIImageView* imageView =[self.getMember(@"memberImageView1")]; 

もちろん、objective-c構文の解決策であり、カスタムではありません。おかげさまで

Objective-C Runtime Reference

他の方法は、クラス変数を指すキーとして文字列を辞書を使用することです:あなたはリフレクションを使用することができますこの種のものを行うには

+0

の可能重複[変数を設定する変数の名前を表す文字列を使用して。](http://stackoverflow.com/questions/5680284/using-a-string-representing-the-name-of-a -variableツーセット変数) –

答えて

6

私は反射の前にKey Value Codingをお勧めします。ただ、完全性について

UIImageView* imageView =[self valueForKey:@"memberImageView1"]; 
+0

ニース、私がアクセスし、クラスの値を設定する方法がたくさんあるこれについてのISAスウィズリングや他の楽しいことに – Jim

+0

雅のおかげで知りませんでした。私はカスタムシリアル化のためにこれらのメソッドをたくさん使用します。以下のようないくつかの他の方法をチェックしてください - [NSObjectのdictionaryWithValuesForKeysを:] http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html – Joe

+2

うまくいくこと、この種の疎結合パターンを使用することは非常に珍しいことです。確かに、行うことができ、使用がありますが、通常、密接に結合されたパターンに固執し、コンパイラによって完全に検証することができます。 – bbum

1

、次のようになり、これを行うには、フルにクレイジー方法:

UIImageView *imageView; 

SEL selector = NSSelectorFromString(@"memberImageView1"); 
NSMethodSignature *signature = [self instanceMethodSignatureForSelector:selector]; 
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; 

[invocation setSelector:selector]; 
[invocation setTarget:self]; 
[invocation invoke]; 
[invocation getReturnValue:&imageView]; 

Daily WTFにクロスポストへお気軽にお問い合わせください。

関連する問題