2009-12-28 14 views

Odpowiedz

48

Podczas @weichsel jest prawidłowa, nie ma lepszego sposobu.

Zastosowanie:

[anObject valueForKey: @"propertyName"]; 

i

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

Oczywiście @"propertyName" może być NSString, który składa się dynamicznie w czasie pracy.

Ta technika nazywa się Key Value Coding i ma fundamentalne znaczenie dla kakao.

Dlaczego to jest lepsze, ponieważ -valueForKey zrobi to, co konieczne, aby "skrzynkowy", niezależnie od tego, jaki typ właściwości wraca do obiektu. Tak więc, jeśli właściwość jest typu int, zwróci instancję NSNumber zawierającą int.

Jest to o wiele łatwiejsze do czynienia z - performSelector będzie tylko praca dla typów, które zdarzają aby pasowały do ​​wartości wskaźnika w pamięci.

Należy pamiętać, że istnieje również -setValue:forKey:.

+0

Bardzo przydatne! Tego nie wiedziałem. –

2

@synthesize propertyName automatyzuje generowanie metod getter i setter.

Kompilator generuje

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

Jeśli masz selektor jako NSString, można użyć performSelector:NSSelectorFromString.
np .:
[object performSelector:NSSelectorFromString(@"propertyName") ...]

+1

Będziesz musiał użyć 'performSelector: withObject:' w celu ustawienia właściwości. –

Powiązane problemy