Schritt für Schritt - Entwickeln für OS X und iOS
Schritt für Schritt - Entwickeln für OS X und iOS
Binding, Teil 2

Wie Sie auf der letzten Seiten gelesen haben, ist es ein leichtes, ein Textfeld direkt an die Eigenschaft eines Objektes zu binden. Wird die Eigenschaft geändert, aktualisiert sich das Textfeld automatisch. Das wirft natürlich die Frage auf, ob diese Verbindung auch in die andere Richtung funktioniert. Leider sind die Textfelder für die Character-Eigenschaften nicht editierbar, aber wir können die Character-Klasse um ein Feld erweitern, das editierbar sein muss. Nämlich den Namen der Spielfigur.
stacks_image_6C6C194F-B8A1-47A8-B470-87E5F7A5CD37
Nachdem die grafische Oberfläche erweitert wurde - der zweite Button wird später zum Testen des Bindings gebraucht - muss auch die Controller-Klasse um ein Outlet und eine Action erweitert werden.
IBOutlet NSTextField *txtName;
- (
IBAction)testBinding:(id)sender;
Auch die Klasse Character benötigt eine weitere Instanzvariable.
NSString *characterName;
Die Accessor-Methoden für diese Eigenschaft können Sie auf die zuvor beschriebene Art wieder von Xcode erstellen lassen.

Auch das Anbinden des Textfeldes funktioniert nicht anders als zuvor.
[txtName bind:@"value"toObject:rpgCharacter
withKeyPath:
@"characterName" options:nil];
Wenn Sie nun in einem Textfeld eine Eingabe tätigen und anschliessend auf den Testen-Button klicken, sollte der Text auf dem Konsolenfenster ausgegeben werden.
- (IBAction)testBinding:(id)sender
{
    NSLog(
@"%@", [rpgCharacter characterName] );
}
Es ist allerdings sehr wichtig, dass Sie Ihre Eingabe mit Tab oder Enter-Taste abschliessen. Erst dann wird die Eigenschaft in rpgCharacter aktualisiert.
stacks_image_A79DBD97-E284-4C94-95E7-222963BBC8CC
stacks_image_DF75F780-254E-497B-B469-969EEE50DA47
Mit diesem Experiment haben Sie zweifelsfrei festgestellt, dass Binding in beide Richtungen funktioniert.

nächste Seite