3

レシーバークラスが NSKeyValueProtocol に準拠している場合、長い道のりを歩むオプションがあります。

[myInstance setValue:[NSNumber numberWithInt:2] forKey:@"integerProperty"];

または短い方法:

myInstance.integerProperty = 2;

この KVC メソッドのポイントは何ですか? これはいつ役に立ちますか?

4

1 に答える 1

3

まず、それらは同じではありません。2 番目は次のようになります。

myInstance.integerProperty = [NSNumber numbwerWithInt:2];

integerPropertyの場合NSNumber

通常、最も多くのことを行う場合は、2 番目の形式を使用します。setValue:forKey:物を格納するプロパティを動的に選択したい場合にandを使用valueForKey:します。たとえば、 an がどのように機能するかを考えますvalueForKeyPath:(NSArray参考までに、-valueForKey:an に対して呼び出すと、NSArray各オブジェクトが対応するオブジェクトに問い合わせた結果である配列が返されます)。そのNSArray値のその中で:

- (NSArray *) valueForKey:(id)key {
  NSMutableArray *retval = [NSMutableArray array];

  for (NSObject *object in self) {
    [retval addObject:[object valueForKey:key]];
  }

  return retval;
}

上記の場合valueForKey:、キーが引数として渡されるため、キーが何であるかを事前に知らなくても、関数を実装するために使用できました。

于 2009-07-22T09:19:03.140 に答える