Bereiche
News
Rewind
Tipps & Berichte
Forum
Galerie
Journals
Events
Umfragen
Themenwoche
Kleinanzeigen
Interaktiv
Anmelden
Registrierung
Zu allen empfangenen Nachrichten
Suche...
Zur erweiterten Suche
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
13.04.06
13: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?“
Hilfreich?
0
Kommentare
sonorman
13.04.06
13:08
Wieso ist denn Dein Avatar so riesig (190kb)? Wird bei mir im Browser übrigens nicht angezeigt.
Hilfreich?
0
Mendel Kucharzeck
13.04.06
13: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!
Hilfreich?
0
sonorman
13.04.06
13:20
Aha! Jetzt sehe ich auch den Avatar. (Sorry für die OT-Randbemerkung.
).
Hilfreich?
0
Sebastian
13.04.06
13: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.
Hilfreich?
0
Mendel Kucharzeck
13.04.06
13: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!
Hilfreich?
0
Sebastian
13.04.06
13: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.
Hilfreich?
0
jonny91
13.04.06
13: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?“
Hilfreich?
0
Mendel Kucharzeck
13.04.06
13: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!
Hilfreich?
0
Sebastian
13.04.06
13: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.
Hilfreich?
0
jonny91
13.04.06
13:49
Ich höre zwei Stimmen, aber ich verstehe keine!:-((
„How much wood would a woodchuck chuck if a woodchuck could chuck wood?“
Hilfreich?
0
Sebastian
13.04.06
13: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]
Hilfreich?
0
jonny91
13.04.06
13: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?“
Hilfreich?
0
jonny91
13.04.06
14: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?“
Hilfreich?
0
Mendel Kucharzeck
13.04.06
14: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!
Hilfreich?
0
Sebastian
13.04.06
14: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.
Hilfreich?
0
Mendel Kucharzeck
13.04.06
14: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!
Hilfreich?
0
Sebastian
13.04.06
16: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)?
Hilfreich?
0
jonny91
13.04.06
17: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?“
Hilfreich?
0
Sebastian
13.04.06
17: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).
Hilfreich?
0
Christian Fries
13.04.06
17: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?
Hilfreich?
0
Sebastian
13.04.06
18: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.
Hilfreich?
0
Christian Fries
13.04.06
18: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.
Hilfreich?
0
Sebastian
13.04.06
18: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.
Hilfreich?
0
Christian Fries
13.04.06
18: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.
Hilfreich?
0
Christian Fries
13.04.06
18:47
Ich glaube Mendel störte nur, dass die Toolbar bei Dir in der App ge-manged wird. Oder ist das gar nicht so?
Hilfreich?
0
jonny91
13.04.06
21: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?“
Hilfreich?
0
Kommentieren
Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.
Apple gewährt Einblick in Audio- und Video-Test...
20 Jahre Mac mini
UltraFine 6K: LG möchte Apple mit neuem 32-Zoll...
Bald viel mehr HomeKit-kompatible Geräte? Apple...
Thunderbolt 5 am M4-Mac: Erstes Dock hinterläss...
Erste Benchmarks: M4 Pro schneller als ein M2 U...
Bericht: MacBook Air M4 auf dem Weg – und mehr ...
iPad Pro M4: Hinweise auf geringere Nachfrage