Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Methode beim Start aufrufen

Methode beim Start aufrufen

jonny91
jonny9113.04.0613:02
Ich habe ein App geschrieben (ObjC; Cocoa) , das eine Toolbar enthält. Damit die Toolbar erstellt und an dem Fenster angebracht wird muss ich -setupToolbar aufrufen. Bisher habe ich das über einen Button gemacht, aber ich möchte natürlich, dass das beim Programmstart geschieht! Nur wie rufe ich die Methode auf ohne auf einen Button zu klicken???
„How much wood would a woodchuck chuck if a woodchuck could chuck wood?“
0

Kommentare

sonorman
sonorman13.04.0613:08
Wieso ist denn Dein Avatar so riesig (190kb)? Wird bei mir im Browser übrigens nicht angezeigt.
0
Mendel Kucharzeck
Mendel Kucharzeck13.04.0613:16
Das geht einfach: Erstelle eine Unterklasse deines Fensters, in dem die Toolbar eingefügt werden soll. Das Fenster kommt aus dem NIB-File, daher wird, nachdem das Fenster erstellt wurde, awakeFromNib aufgerufen. Dies überschreibst du in deiner Unterklasse von NSWindow und kannst dort deine Toolbar initialisieren!
0
sonorman
sonorman13.04.0613:20
Aha! Jetzt sehe ich auch den Avatar. (Sorry für die OT-Randbemerkung. ).
0
Sebastian
Sebastian13.04.0613:23
Mendel Kucharzeck
Das geht einfach: Erstelle eine Unterklasse deines Fensters, in dem die Toolbar eingefügt werden soll. Das Fenster kommt aus dem NIB-File, daher wird, nachdem das Fenster erstellt wurde, awakeFromNib aufgerufen. Dies überschreibst du in deiner Unterklasse von NSWindow und kannst dort deine Toolbar initialisieren!

Vorausgesetzt, das ist eine Document based App. Wenn nicht reicht es, Deinen Controller zum App-Delegate zu machen, dann wie gehabt in awakeFromNib. Keine Unterklasse notwendig.
0
Mendel Kucharzeck
Mendel Kucharzeck13.04.0613:26
Sebastian
Was hat das damit zu tun ob es Document Based ist? Es ist generell besser, wenn das Fenster dies erstellt da es strukturell besser ist. Das Objekt "Fenster" erstellt dann seine eigene Toolbar anstatt dass eine andere Klasse diese erstellt. Ist VIEL übersichtlicher!
0
Sebastian
Sebastian13.04.0613:32
Vielleicht habe ich auch nur Probleme mit dem Ausdruck "Unterklasse". Du erstellt nicht wirklich eine Unterklasse von NSWindow, oder? Wenn Du einen Controller meinst sind wir uns einig.
0
jonny91
jonny9113.04.0613:33
Ähm - Wieso Unterklasse des Fensters? Ist das Fenster nicht ein Objekt von NSWindow? Soll ich eine Unterklasse von NSWindow erstellen? Woher weiß der dann welches Fenster ich meine? Tut mir leid ich bin ein ziemlicher Anfänger...
Was ist Document based???
„How much wood would a woodchuck chuck if a woodchuck could chuck wood?“
0
Mendel Kucharzeck
Mendel Kucharzeck13.04.0613:36
Sebastian
Doch, ich meine eine "Subclass" (Abgeleitete Klasse) von NSWindow. Die setzt man dann als Custom Class im Interface Builder Voila! awakeFromNib wird aufgerufen, dort kann man die Toolbar initialisieren und das Fenster macht alles selber!

jonny91
Du kannst im Interface Builder bei deinem Fenster eine Custom Class setzen, diese wird dann anstatt NSWindow erstellt!
0
Sebastian
Sebastian13.04.0613:46
Uh, also das mit der Unterklasse ist echt nicht schön. Guck Dir dazu auch mal die ganze Doku und den Samplecode von Apple an.

jonny91, Deine Augen werden müde. -- Du hörst nur noch meine Stimme -- Hör nicht auf Mendel...

Ganz ehrlich, sehr unschön.
0
jonny91
jonny9113.04.0613:49
Ich höre zwei Stimmen, aber ich verstehe keine!:-((
„How much wood would a woodchuck chuck if a woodchuck could chuck wood?“
0
Sebastian
Sebastian13.04.0613:54
Guck Dir mal /Developer/Examples/AppKit/SimpleToolbar an.

Das ganze ist ein Beispiel für eine Document-based App (ohne Unterklasse von NSWindow ). Wenn Du eine nicht Document-based App hast wirst Du ja irgendeine Art von Controller haben, also eine Klasse, von der beim Start eine Instanz erzeugt wird. Die machst DU zum App-Delegate und bekommst dann auch das awakeFromNib.
Entweder in IB zum Delegate machen oder mit [NSApp setDelegate:self]
0
jonny91
jonny9113.04.0613:55
Ich habe ja bereits eine Klasse (ToolbarController)! Ist eine Unterklasse von NSObject.

Was heißt delegate? Und wie mache ich ToolbarController zum App-Delegate?
„How much wood would a woodchuck chuck if a woodchuck could chuck wood?“
0
jonny91
jonny9113.04.0614:01
Es geht!!!! vielen Dank (hab jetzt Sebastians Weg genommen)
Da muss man erstmal drauf kommen...

Mendel, deinen Weg hab ich glaub ich auch verstanden, Aber ich hatte bereits ein fertiges Fenster und hätte sonst ja ein neues Machen müssen...

Danke nochmal an alle!
„How much wood would a woodchuck chuck if a woodchuck could chuck wood?“
0
Mendel Kucharzeck
Mendel Kucharzeck13.04.0614:02
Sebastian
Ist es nicht das Grundlegende der Objektorientierung, dass man die Funktionalität eines Objektes in sich selbst kapseln sollte? Das Fenster will eine Toolbar haben, also sollte sich das Fenster darum selbst kümmern!
0
Sebastian
Sebastian13.04.0614:17
Mendel
Naja, erstmal natürlich: ich will Dir nicht sagen, wie Du zu programmieren hast. (Aber erlaube mir die Zwischenfrage: kommst Du von der Windows-Programmiererei?)
Aber ich denke, Unterklassen sollten wirklich nur dem Anpassen des Verhaltens bzw. Erweitern der Funktionalität eines Objektes dienen.

In diesem Fall ist das aber nicht so. Du nutzt Mechanismen wie beispielsweise Delegates -- dadurch wird das ganze auch viel flexibler -- für eben genau solche Fälle.
Schließlich (siehe SimpleToolbar) macht Apple das auch so. (OK, zugegeben, Totschlagargument. Aber die kennen ihre Mechanismen auch und werden die aus bestimmten Gründen geschaffen haben und auch nutzen.)

Und ohne großer Dogmatiker zu sein... ob das mit der Unterklasse großartig MVC-konform ist wage ich zu bezweifeln.
0
Mendel Kucharzeck
Mendel Kucharzeck13.04.0614:25
Sebastian
Ne, bin kein Windows-Entwickler, schon immer Mac!

Was sagst du gegen mein Argument, dass es das Grundprinzip der Objektorientierung ist?

Stelle dir doch mal vor, du willst das Fenster aus irgendeinem Grund jetzt zwei Mal haben? Mit der Delegate-Methode (die in anderen Fällen, siehe Table Views, sehr gut ist) geht das nicht so einfach, mit meiner Methode ohne eine Zeile mehr Code!
0
Sebastian
Sebastian13.04.0616:14
Mendel Kucharzeck
Sebastian
Stelle dir doch mal vor, du willst das Fenster aus irgendeinem Grund jetzt zwei Mal haben? Mit der Delegate-Methode (die in anderen Fällen, siehe Table Views, sehr gut ist) geht das nicht so einfach, mit meiner Methode ohne eine Zeile mehr Code!
Wieso das? Ich habe schon Document based Apps geschrieben, jedes Fenster mit Toolbar. Und da war kein zusätzlicher Code erforderlich. Wieso auch?
Für nicht Document based Apps gilt das genauso.

Was für Code würdest Du denn einfügen (wollen)?
0
jonny91
jonny9113.04.0617:10
Ich hab noch eine Frage:
wenn ich meine NSToolbarItems mache (toolbar:ItemForItemIdentifier:WillBeInsertedIntoToolbar:) vergebe ich ja Label, PaletteLabel, ToolTip usw. - wie kann ich das lokalisieren(?)
„How much wood would a woodchuck chuck if a woodchuck could chuck wood?“
0
Sebastian
Sebastian13.04.0617:26
Mit NSLocalizedString:

Einfach eine German.strings, French.strings, ... anlegen (guck Dir einfach mal in den Resourcen eines existierenden lokalisierten Programms an wie die aussehen. Bearbeiten geht prima mit dem Property List Editor).
0
Christian Fries13.04.0617:30

Finde Mendels Lösung natürlich. Passt doch in das "is a" Scheme.

"Window with Toolbar" "is a" "Windows"

daher Subclassing

MyWindowWithToolbar extends NSWindow

oder?

0
Sebastian
Sebastian13.04.0618:12
Christian
Selbst wenn Du meine Argumentation nicht verstehst -- meinst Du nicht, auch Apple hat sich was dabei gedacht daß sie das so lösen in ihrem Sample-Code?

Für genau solche Zwecke wurden die Delegates eben geschaffen. Du bist damit echt ne ganze Ecke flexibler.
0
Christian Fries13.04.0618:37
Du kannst das auch als Delegate lösen. Ich verstehe nur Mendel so, dass er das Window als Delegate registrieren will, nicht die Applikation....?!?

Aber vielleicht hast Du recht. Ich verstehe es nicht. Hab Cocoa schon länger nicht mehr angefasst und Delegates gibt es nicht überall...

Bin ja schon ruhig.
0
Sebastian
Sebastian13.04.0618:43
Na, wenn Du eine Subclass hast brauchst Du die nicht mal mehr als Delegate zu registrieren. Es geht ja nur darum, aufgerufen zu werden wenn das Nib geladen wurde.

Und eben deswegen finde ich da ja so unflexibel.

Aber wie gesagt, ich will niemandem sagen wie er zu programmieren hat. Und daß beide Ansätze zum Ziel führen ist nicht bestritten.
0
Christian Fries13.04.0618:46
Ähm, noch kurz:

Wird die Toolbar nicht so and das Window attached?! Dann ist es doch in der Tat aufgabe des Windows (oder der Toolbar), aber nicht der App, für die Toolbar zu sorgen.

App öffnet Window.
Window managed Toolbar.

0
Christian Fries13.04.0618:47
Ich glaube Mendel störte nur, dass die Toolbar bei Dir in der App ge-manged wird. Oder ist das gar nicht so?
0
jonny91
jonny9113.04.0621:13
Ihr seid heute ja so hilfsbereit:-y:
Wie kann ich den Inhalt eines NSTextView mit saveDocument: (aus NSDocument) speichern? Wandelt der mir das automatisch in RTF oder so
„How much wood would a woodchuck chuck if a woodchuck could chuck wood?“
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.