Znam nazwę ciągu właściwości obiektu. W jaki sposób chciałbym uzyskać i ustawić tę właściwość za pomocą ciągu?Uzyskiwanie dostępu do właściwości Objective-C dynamicznie za pomocą nazwy właściwości
Odpowiedz
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:
.
@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") ...]
Będziesz musiał użyć 'performSelector: withObject:' w celu ustawienia właściwości. –
Bardzo przydatne! Tego nie wiedziałem. –