Für gewöhnlich ist das Erste, was man in einer neuen Programmiersprache programmiert, das so genannte Hallo Welt oder Hello World Programm, das nichts anderes macht, als eben diesen Text auf den Bildschirm zu schreiben. Auch an dieser Stelle werden wir mit der Tradition nicht brechen. Da Sie aber eine Cocoa-Anwendung erstellen, wird Ihr Hallo Welt in einem schönen neuen Fenster stehen. Am Ende der Lektion erfahren Sie dann noch etwas über die MVC-Architektur und wie Sie durch Delegation bestehende Klassen erweitern können, ohne von ihnen ableiten zu müssen.
Die erste Herausforderung, um mit Xcode ein Programm für Mac OS X zu erzeugen, ist es, die passende Projektvorlage zu finden. In einem Projekt werden alle Daten zusammengefasst, aus denen später das fertige Programm erstellt wird. Das sind in erster Linie natürlich Programmcodedateien, aber auch Bilder und andere Dateien können in einem Projekt enthalten sein. Außerdem enthält das Projekt auch Informationen, wie die ganzen Einzelteile später zusammengebaut werden sollen. Ihr erstes Programm soll eine einfache Cocoa-Anwendung sein, die in einem Fenster den Text "Hallo Welt" anzeigt. Um das zu realisieren, starten Sie Xcode, falls noch nicht geschehen, und wählen Sie im Menü oder im Startfenster New Projekt. Wählen Sie anschliessend Application und Cocoa Application. Weitere Optionen wie „document-based“ oder „Use Core Data“ müssen für diese Anwendung nicht aktiviert werden.
Als nächstes werden Sie nach dem Namen des Projektes gefragt. Wählen Sie hier "HalloWelt". Der Projektname ist natürlich vollkommen willkürlich, aber man sollte immer etwas Sinnvolles wählen. Das ist professioneller und Sie haben es später einfacher, alte Projekte wieder zu finden, denn als Programmierer entwickelt man mitunter recht viele Projekte. Auch sollte man den angebotenen Speicherort nicht einfach übernehmen. Tut man dies, werden alle Xcode Projekte im Home-Verzeichnis des aktuellen Benutzers abgelegt. An dieser Stelle einen zusätzlichen Ordner für Projekte anzulegen, ist sicherlich die bessere Lösung.
Nachdem Sie mit dem Anlegen des Projektes fertig sind, erscheint nach kurzer Zeit Xcode mit der Projektübersicht.
Ganz besonders wichtig im Projektfenster ist die Schaltfläche Build and Run. Klicken Sie dort, wird das aktuelle Programm kompiliert und gestartet. Das funktioniert sogar jetzt schon, ohne dass Sie etwas programmiert haben. Das ist der große Vorteil von Projektvorlagen. Nach Programmstart erhalten Sie ein zwar leeres, aber voll funktionsfähiges neues Fenster. Sie können es verschieben und die Größe ändern, eben alle Funktionen, die man von einem Programmfenster gewohnt ist. Sie sehen also, dass Sie sich um grundlegende Fensterfunktionen nicht selbst kümmern müssen. Sollten Sie Build and Run testen, vergessen Sie bitte nicht, das dadurch erzeugte Programm auch wieder zu beenden, denn es ist eine ganz normale Anwendung, die ausgeführt wird, bis ein Benutzer sie beendet
Eine Cocoa Anwendung braucht, um korrekt funktionieren zu können, eine Klasse, die als Brücke zwischen Programmcode und der grafischen Oberfläche fungiert. Da diese Klasse den gesamten Ablauf des Programms kontrolliert, wird sie in der Regel auch als Controller bezeichnet. Mehr Informationen zu diesem Thema finden Sie auf der Seite Model-View-Controller am Ende dieser Lektion. Wenn Sie ihr Projekt mit der neuesten Version von Xcode erzeugt haben, werden automatisch Dateien erzeugt, die als Controller für die Anwendung benutzt werden können. Für einen erfahren Entwickler bringen die Dateien zwar eine große Zeitersparnis, im ersten Projekt würden sie aber wahrscheinlich nur verwirren, da die Klasse mehr Programmcode enthält, als für die Anwendung in dieser Lektion tatsächlich nötig ist. Außerdem soll die Klasse für den Controller MyController heissen und nicht wie von Xcode vorgeschlagen HalloWeltAppDelegate. Da es sich bei dem Controller um eine ganz normale Objective-C Klasse handelt, kann er als neue Klasse sehr leicht dem aktuellem Projekt hinzugefügt werden. Wählen Sie dafür aus dem Menü von Xcode File und New File. Der Dateityp ist, wie schon erwähnt, Objective-C class.
Nennen sie die Klasse MyController.m und stellen Sie sicher, dass die Option „Also create MyController.h“ aktiviert ist. Eine Klasse in Objective-C besteht in der Regel aus zwei Dateien. Eine .h Datei als Header, in der alle Instanzvariablen und Methoden deklariert sind, und eine .m Datei für den Programmcode. Das .m steht für Message, also Nachricht. Auch dazu mehr am Ende der Lektion.
Wenn Sie anschließend in der Projektübersicht auf das Projekt klicken, sehen Sie alle Dateien im Projekt. Das Projekt wird durch ein blaues Symbol dargestellt und befindet sich als erster Eintrag in den Groups & Files.
Wie Sie sehr gut sehen können, befindet sich die neu erstellte Klasse mit den beiden Dateien nun ebenfalls im Projekt. Das gleiche gilt für die automatisch erstellte Klasse HalloWeltAppDelegate. Sie können die von Xcode generierte Klasse löschen oder ignorieren. Es hat keine Auswirkung auf die zu erstellende Anwendung, wenn die Klasse im Projekt bleibt. In den folgenden Lektionen werde Sie die Controller-Klasse immer selbst erzeugen, da die Beispiele ursprünglich für eine ältere Version von Xcode geschrieben wurden und Sie ausserdem so mehr Kontrolle über Ihr Projekt erhalten. Um etwas Ordnung in ihr Projekt zu bringen, sollten Sie die neu erstellten Dateien in die Gruppe Classes verschieben. Die gelben Symbole sehen zwar aus wie Ordner, werden aber innerhalb von Xcode Gruppen genannt.
In Cocoa Anwendungen gibt es eine sehr strenge Trennung zwischen grafischer Oberfläche und Programmcode, es gibt sogar zwei verschiedene Programme, um die verschiedenen Teile zu bearbeiten wie Sie später noch feststellen werden. Um vom geschrieben Code aus mit Objekten auf der grafischen Oberfläche zu kommunizieren, gibt es zwei besondere Bezeichner, die in wahrscheinlich jeder Controller-Klasse vorkommen. IBOutlet und IBAction. IBOutlet ist eine spezielle Instanzvariable, die auf ein anderes Objekt, für gewöhnlich in der grafischen Oberfläche, verweist. IBAction ist eine besondere Methode, die von der grafischen Oberfläche aufgerufen werden kann. Die Buchstaben IB sind eine Anspielung auf den Interface Builder, ein Programm, das zum Erzeugen und Verwalten der grafischen Oberfläche verwendet wird. In Ihrem Programm benötigen Sie ein IBOutlet und eine IBAction. Die Action-Methode soll aufgerufen werden, wenn ein Button angeklickt wurde, und über das Outlet kann ein Text auf die Oberfläche, genauer gesagt, in ein Textfeld, geschrieben werden. Fügen Sie dem Programmcode ein Outlet und eine Action hinzu. Erweitern Sie die MyController.h Datei, damit sie so aussieht:
Um Ihre Klasse später im Interface Builder verwenden zu können, benötigen Sie nur die Deklaration der Action und des Outlet in der Headerdatei. Eine Implementation der clickMe-Methode in der Code Datei ist dafür nicht nötig. Allerdings wird Sie der Compiler warnen, wenn die Implementation fehlt. Ergänzen Sie deshalb die MyController.m Datei um die folgende Methode.
#import <Cocoa/Cocoa.h>
@interface MyController : NSObject {
IBOutlet id outputText;
}
- (IBAction)clickMe:(id)sender;
@end
Vergessen Sie nicht, die geänderten Dateien zu speichern. Ob eine Datei nach Änderungen gespeichert wurde, können Sie sehr schnell im Projektfenster erkennen. Veränderte, aber bisher nicht gesicherte Dateien werden grau dargestellt. Mit diesen weniger Zeilen Programmcode ist die Programmierung abgeschlossen, der Rest der Anwendung wird im dem Programm Interface Builder erstellt. Um den Interface Builder zu starten, genügt ein Doppelklick auf die MainMenu.xib Datei. Diese finden sie in der Projektübersicht oder in dem Smartfolder NIB Files.
#import "MyController.h"
@implementation MyController
- (IBAction)clickMe:(id)sender
{
[outputText setStringValue:@"Hallo Welt"];
}
@end
Der Interface-Builder öffnet mehrere Fenster. Das Haupfenster. Dies ist die Schaltzentrale des Interface Builder. Alle für die Anwendung wichtigen Einstellungen werden hier gemacht.
Das Programmfenster. Dieses Fenster ist vollkommen leer und trägt den Namen des Projektes in der Titelleiste. Das ist auch nicht verwunderlich, repräsentiert dieses Fenster die gerade erzeugte Anwendung in ihrem Urzustand. Da Sie noch keine Steuerelemente hinzugefügt haben, ist das Fenster leer. Außer der Fenstergröße kann man an diesem Fenster selbst nicht viel verändern.
Alle weiteren Eigenschaften werden durch den Inspector, ein weiteres Fenster, das sich ebenfalls geöffnet hat, verändert. Sollten Sie den Inspector nicht sehen, können Sie ihn durch einen Unterpunkt im Menü Tools des Interface Builders erneut einblenden.
Geschrieben am: 18.03.2007 Technologien: Xcode, Objective-C, OS X