Ich kenne den String-Namen einer Eigenschaft eines Objekts. Wie würde ich diese Eigenschaft mithilfe der Zeichenfolge abrufen und festlegen?Access Objective-C-Eigenschaft dynamisch mit dem Namen der Eigenschaft
Antwort
Während @weichsel korrekt ist, gibt es eine bessere Art und Weise.
Verwendung:
[anObject valueForKey: @"propertyName"];
und
[anObject setValue:value forKey:@"propertyName"];
Offensichtlich kann ein @"propertyName"
NSString
sein, die zur Laufzeit dynamisch zusammengesetzt ist.
Diese Technik wird Key Value Coding genannt und ist grundlegend für Kakao.
Warum das besser ist, ist, weil -valueForKey
tun wird, was notwendig ist, um "box" egal welchen Typ die Eigenschaft in ein Objekt zurückgibt. Wenn die Eigenschaft vom Typ int
ist, wird daher eine NSNumber
Instanz zurückgegeben, die den int enthält.
Das ist viel einfacher zu handhaben - performSelector
wird nur Arbeit für Typen, die passieren in einen Zeiger im Wert von Speicher passen.
Beachten Sie, dass es auch -setValue:forKey:
gibt.
@synthesize propertyName
automatisiert die Generierung von Getter- und Setter-Methoden.
Der Compiler erzeugt
- (id)propertyName;
- (void)setPropertyName;
Wenn Sie einen Selektor als NSString haben, können Sie performSelector:NSSelectorFromString
verwenden.
z.B .:
[object performSelector:NSSelectorFromString(@"propertyName") ...]
Sie müssen 'performSelector: withObject:' verwenden, um die Eigenschaft festzulegen. –
Sehr praktisch! Wusste das nicht. –