• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

Kein Fenster, nur Menuleiste nach kompilieren mit Xcode 3.2.2

Anioha

Erdapfel
Registriert
01.05.10
Beiträge
4
Hallo,
seit kurzem beschäftige ich mich nun mit Objective-C, Cocoa und Xcode.
Mein Problem ist dass nach dem Kompilieren eines Beispielprogramms lediglich die Menüleiste oben angezeigt wird.
Das Fenster selbst, welches ich nach Anleitung im Interface Builder erstellt habe wird nicht angezeigt, auch nicht wenn ich 'andere ausblenden' aktiviere.

Des weiteren ist mir aufgefallen dass wenn ich ein neues Projekt anlege, die Header und Klassen Dateien, sowie die beiden InterfaceBuilder Dateien nicht den Namen des Projektes übernehmen sondern jeweils MyDocument mit der entsprechenden Endung heissen.

Deinstallation, über das mitgelieferte Script, und neuinstallation hat leider auch nichts gebracht.

Wäre schön wenn mir jemand einen Tipp geben könnte wie ich besagte Probleme beheben kann.

Gruß, Marco
 
Im Interface-Builder kannst du im Inspector, wenn dein Fenster (durch klicken auf dessen Titelleiste) ausgewählt ist, bestimmen, ob das Fenster beim Programm-Start angezeigt werden soll - zumindest mag ich mich an diese Funktion erinnern.
 
Des weiteren ist mir aufgefallen dass wenn ich ein neues Projekt anlege, die Header und Klassen Dateien, sowie die beiden InterfaceBuilder Dateien nicht den Namen des Projektes übernehmen sondern jeweils MyDocument mit der entsprechenden Endung heissen.

Deinstallation, über das mitgelieferte Script, und neuinstallation hat leider auch nichts gebracht.
Das ist ja auch normal, wenn Du eine Document based Application erstellst.

MacApple
 
@Jank: Vielen Dank für den Hinweis. Leider schien es nicht darann zu liegen...
@MacApple: War das nicht mal so dass die Dateien, zumindest die erste Klasse, automatisch den Namen des Projektes übernommen hat?
Ich finde das so, zumindest für einen Anfänger, doch etwas unpraktisch da man dann ja bei Bedarf überall den Namen ändern muss.

Nachdem ich noch einmal ein bisschen herumexperimentiert habe ist mir aufgefallen dass wenn ich ein neues Projekt anlege und dieses gleich kompiliere, das Fenster auch angezeigt wird....
Also habe ich im neuen Projekt Methode für Methode gelöscht und jeweils neu kompiliert um zu sehen welche für die initialisierung des Fenster verantwortlich ist.

Wie es scheint ist es wohl diese hier:
- (NSString *)windowNibName
{
// Override returning the nib file name of the document
// If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead.
return @"MyDocument";
}

...muss diese Methode jedesmal implementiert werden oder müsste dies noramalerweise auch ohne funktionieren?
Was mir etwas seltsam vorkommt ist dass, wenn den diese Methode Pflicht ist, dies in meinem Buch welches eigentlich für Einsteiger in dieser Materie sein soll nicht erwähnt wird.

Gruß, Marco
 
Du kannst auf zig Arten ein Window erzeugen.

So wie es aussieht, hast Du eine dokumentenbasierte Applikation erstellt. Sprich: Da ist eine Klasse, die sich von NSDocument ableitet. NSDocument hat die windowsNibName-Methode, um zu wissen, mit welcher Nib sie das Dokumentenwindow erstellen soll.

Du sagst praktisch NSDocument, dass Dein Dokumentenfenster in "MyDocument" liegt. Dann erstellt NSDocument das Dokumentenfenster und den dazugehörigen Window-Controller für Dich. Hier setzt Du Dich praktisch "ins gemachte Nest", da NSDocument schon viele Grundfunktionen für eine dokumentenbasierte Applikation enthält.

Du kannst natürlich auch einfach einen NSWindowController nehmen und mit initWithWindowNibName ein Fenster erzeugen.