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_4BDAB072-86F3-4154-8E82-5BAFE6136F38
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_28DF1979-2836-461A-BF9C-3BD08D11A621
stacks_image_A1AF1E8F-8C90-4270-B6B2-F650AEF6F337
Mit diesem Experiment haben Sie zweifelsfrei festgestellt, dass Binding in beide Richtungen funktioniert.

nächste Seite