
Kapitel 6 - Fortsetzung
Was muss nun geschehen: bei Klicken auf den Umrechnen Button wird dieses Signal an MyController gesendet. Die Daten die augenommen wurden sollen an die Umrechner Klasse gesendet werden um die Umrechnung vorzunehmen und zurückzugeben. Sie müssen jetzt in MyController.m wechseln um diese Methode in die convert: Methode einzubauen. Der Quelltext schaut dann so aus:
#import "MyController.h"
@implementation MyController
- (IBAction)convert:(id)sender
{
float euros, kurs, endbetrag;
kurs = [aktuellerKurs floatValue];
euros = [wievielEuro floatValue];
endbetrag = [umrechner umrechnungEuro:euros inFranken:kurs];
[wechselkurs setFloatValue:endbetrag];
[aktuellerKurs selectText:self];
}
@end
Der obere Code in seinen einzelnen Schritten und Abschnitten:
1. Der obere Code definiert zuerst die Variablen euros, kurs und endbetrag vom Datentyp float.
float euros, kurs, endbetrag;
2. Die Variable kurs erhält mit einer Anfrage an das aktuellerKurs und das wievielEuro Textfeld deren Inhalt über den Methodenaufruf floatValue.
kurs = [aktuellerKurs floatValue];
euros = [wievielEuro floatValue];
floatValue ist eine Methode die Sie nirgends deklariert haben, also muss Sie wohl schon Teil von NSTextfield sein. Die Frage ist hier stets: wie kann ich wissen, dass ich genau mit floatValue den Inhalt eines NSTextField abfragen kann. Nun, wie bereits gesagt: Programmierer verbringen viel Zeit in der Reference um nachzusehen, welche Methoden eine Klasse besitzt. Gehen wir dem also nach: was Sie brauchen ist ein Internet Anschluss. Gehen sie mit folgendem Link zur Reference von NSTextfield:
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit
/Classes/NSTextField_Class/Reference/Reference.html
Dort angekommen sehen Sie links die Möglichkeit diese Reference auch als PDF herunterzuladen. Wenn Sie in der Reference von NSTextField surfen werden Sie nirgends die Methode floatValue finden. Frage an die Schlauen: wo ist sie? Eine Möglichkeit wäre, dass die Methode floatValue nicht in NSTextfield deklariert wurde, sondern eine Klasse höher und dann vererbt wurde - etwas was im nächsten Kapitel genauer besprochen wird. Sie werden auf der geöffneten Reference-Seite folgende Zeile finden:
Inherits from: NSControl : NSView : NSResponder : NSObject
Inherit ist die englische Bezeichnung für "vererbt". NSTextField ist also ein Kind - so nennt man das wirklich - von NSControl. NSControl wiederum von NSView...etc, bis hin zu NSObject. Suchen wir also in der Reference der nächst höheren Klasse, es ist dies NSControl. Folgen Sie dem Link auf der Homepage oder dem unten genannten Link:
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit
/Classes/NSControl_Class/Reference/Reference.html#//apple_ref/occ/cl/NSControl
Schauen wir zu den verschiedenen Aufgaben (Tasks) die NSControl ausführen kann. Na, gefunden: unter Setting the Control´s Value finden Sie floatValue. In der Reference sehen Sie auch wieviel Aufgaben so eine Klasse erfüllen kann - und Sie kann noch mehr, denn Sie kann jeweils noch alle Aufgaben der nächst höheren Elternklasse darüber erfüllen. Die Vererbung wird im nächsten Kapitel noch genauer besprochen, da es eine der ganz großen Vorteile objektorientierter Programmierung darstellt.
3. Nun wurden die Informationen aus den beiden Textfeldern eingelesen und verarbeitet. In der nächsten Zeile
endbetrag = [umrechner umrechnungEuro:euros inFranken:kurs];
wird nun die methode umrechnungEuro:inFranken im umrechner outlet gesendet und der berechnete Wert zurückgesendet. Der Teil ist wirklich geschickt!
4. Jetzt kommt der errechnete Wert zurück. Diesen wollen Sie im letzten Textfeld anzeigen lassen.
[wechselkurs setFloatValue:endbetrag];
Dies tun Sie indem Sie den erhaltenen Betrag in das Textfeld wechselkurs einsetzen und zwar durch den Methodenaufruf setFloatValue. Richtig: diese Methode haben Sie nicht deklariert und definiert, es ist bereits eine bestehende Methode von NSTextField die Sie angewendet haben - ist hoffe es beginnt Spass zu machen! Und wo Sie diese Methode finden und nachlesen können wissen Sie jetzt auch! Dazu vielleich ein Trick: markieren Sie setFloatValue durch einen Doppelklick, halten Sie die ctrl-Taste gedrückt und drücken Sie auf die Maus - oder Trackpad - es öffnet sich ein Untermenü. Wählen Sie hier Find selected Text in API Reference. Es öffnet sich die Referenz und Sie sehen wo diese Methode überall eingesetzt wird und welche Funktion sie besitzt.
5. Lezter Schritt: Sie haben diese Zeile programmiert:
[aktuellerKurs selectText:self];
Hier wird die selectText:self Nachricht zum aktuellerKurs Textfeld gesendet. Was geschieht dadurch. Mit dieser Nachricht wird der Text, bzw in unserem Fall die Zahlen im ersten Textfelde - dem aktuellerKurs Textfeld - wieder für eine neue Eingabe markiert. Würde man diese Nachricht nicht senden, dann würde das Ergebnis im wechselkurs Textfeld markiert. Diese Markierung nutzt aber nichts, da wir diesem Textfeld die Möglichkeit zur Eingabe genommen haben, indem wir bei der Bearbeitung des Textfeldes die Option Editable ausgeschaltet haben. Eine neue Eingabe kann nun erfolgen. Wenn Sie das Programm gestartet haben, können Sie ja mal versuchen diese Zeile wegzuglassen.
Der Code ist beendet, wir können Starten
Der Code für die Umrechnung ist nun beendet, mehr benötigen Sie nicht. Gehen Sie auf Build an Go und starten Sie die Applikation. Im ersten Textfeld geben Sie ein, wieviel Schweizer Franken Sie für einen Euro bekommen, im zweiten Feld dann wieviel Euro sie umwechseln wollen. Das Ergebnis sollte so aussehen:

Damit haben Sie schon sehr viel im Umgang mit Klassen erlernt, das Grundprinzip kennen Sie jetzt. So lasset uns zum nächsten Kapitel gehen!
weiter ---- Objective-C Index ---- Startseite----zurück
EINSTIEG
KAPITEL 1: SCHRITT FÜR SCHRITT ZUM ERSTEN PROGRAMM
KAPITEL 2: OBJEKTE, KLASSEN, INSTANZEN UND METHODEN
KAPITEL 3: DIE VERSCHIEDENEN DATENTYPEN
KAPITEL 4: DIE PROGRAMMSCHLEIFEN
KAPITEL 5: ENTSCHEIDE DICH, ENTWEDER ODER....
KAPITEL 6: UND NOCHMALS KLASSEN
KAPITEL 7: VERERBUNG
KAPITEL 8: POLYMORPHISMUS, DYNASCHISCHE TYPISIERUNG UND DYNAMISCHES BINDEN
KAPITEL 9: NOCH MEHR DATENTYPEN UND VARIABLEN
KAPITEL 10: CATEGORIES, POSING AND PROTOCOL
KAPITEL 11: DER PRÄPROZESSOR