2009-07-02 7 views
1

ich Iterieren durch einige Objekte und versuchen, einige Eigenschaften festlegen, die offenbar nicht mögen Schlüsselwert-Codierung. Daher kann ich zur Laufzeit keine Zeichenfolge zur Darstellung des "Schlüssels" erstellen.Objective-C Punktsyntax Tricks für wenn Key-Wert nicht funktionieren wird?

kompiliert Diese Linie von Viewcontroller wird nicht:

[self setValue:offsetX forKeyPath:[NSString stringWithFormat:@"myView%d.center.x", anInt]]; 

aber ich diese Eigenschaften mit Punktnotation in einer lächerlichen switch-Anweisung einstellen:

myView1.center.x = offsetX; 

Gibt es eine andere Art und Weise, um dies zu ? Vielleicht erstellen Sie einen Accessor wie myView (i) .center.x? Zu wissen es wohl vergeblich sein würde, habe ich versucht, auch: [NSString string: @ „myView% d“, anint den Wert] .center.x
ohne Erfolg ...

Antwort

3

Der Grund ist es vermutlich gewohnt kompilieren wird weil offsetX ein int oder float ist, kein NSNumber (wäre es hilfreich, die Compiler-Fehlermeldung in Ihrer Frage zu geben).

jedoch KVC und setValue: forKeyPath: ist sehr klug und wird von einem NSNumber für Sie automatisch konvertieren, so verwenden:

[self setValue:[NSNumber numberWithInt:offsetX] forKeyPath:[NSString stringWithFormat:@"myView%d.center.x", anInt]]; 

(oder numberWithFloat je nach Bedarf).

+0

Das brillant funktioniert! Vielen Dank! Und Ihr Ansatz führte mich meine nächste Frage, um herauszufinden, welchen myViewX.center einstellt, die durch Setzen des Wertes auf einen CGPoint in ähnlicher Art und Weise ist [NSValue valueWithCGPoint: Centerpoint] statt nur Centerpoint® ... Lebensretter! – Meltemi

+0

Hmmmm. Nun stecken, wie man ein bool für den Einsatz in KVC in so etwas wickeln: [self setValue: JA forKeyPath: [NSString string: @ "@ myView% d.userInteractionEnabled"]]; – Meltemi

+0

BOOLs können in NSNumber eingebunden werden. –