25

オブジェクトのプロパティの文字列名を知っています。文字列を使用してそのプロパティを取得および設定するにはどうすればよいですか?

4

2 に答える 2

50

@weichselは正しいですが、もっと良い方法があります。

使用する:

[anObject valueForKey: @"propertyName"];

[anObject setValue:value forKey:@"propertyName"];

明らかに、実行時に動的に構成される@"propertyName"可能性があります。NSString

この手法はKeyValueコーディングと呼ばれ、Cocoaの基本です。

これが優れている理由-valueForKeyは、プロパティがオブジェクトに返すタイプが何であれ、「ボックス化」するために必要なことを実行するためです。したがって、プロパティがタイプの場合、intを含むインスタンスをint返します。NSNumber

これは処理がはるかに簡単です-ポインタの価値のあるメモリにたまたま収まるタイプに対してのみperformSelector機能します。

もあることに注意してください-setValue:forKey:

于 2009-12-28T15:20:09.907 に答える
2

@synthesize propertyNamegetterメソッドとsetterメソッドの生成を自動化します。

コンパイラは生成します

  • - (id)propertyName;
  • - (void)setPropertyName;

NSStringとしてセレクターがある場合は、を使用できますperformSelector:NSSelectorFromString
例えば:
[object performSelector:NSSelectorFromString(@"propertyName") ...]

于 2009-12-28T15:13:28.220 に答える