Sie haben die richtige Idee. Es gibt zwei Möglichkeiten, Menüpunkte zu aktivieren, wie in Aktivieren von Menüpunkten . Bei automatischer Aktivierung sucht das System in der Responderkette nach Objekten, die die Aktion für jeden Eintrag im Menü implementieren. Findet es einen Responder mit einer entsprechenden Aktion, aktiviert es diesen Menüpunkt.
Sie haben also Ihren Menüpunkt mit dem Erstansprechpartner verbunden und dieselbe Aktion in Ihrer FileMenuController
Klasse. Andere Dinge, die Sie tun müssen, sind:
- Stellen Sie sicher, dass
FileMenuController
erbt von NSResponder, so dass er Teil der Responderkette sein kann
- Erstellen Sie eine Instanz von
FileMenuController
und vergewissern Sie sich, dass er Teil der Responderkette ist.
In Wahrheit wollen Sie wahrscheinlich kein separates Objekt, nur um das Menü Datei zu verwalten. Stattdessen würden Sie normalerweise Ihr -openDocument:
Aktion in Ihrem Anwendungsdelegaten, da diese immer Teil der Antwortkette ist und weil das Öffnen eines Dokuments etwas ist, das die Anwendung tut (im Gegensatz zu, sagen wir, einem Fenster oder einer Ansicht). Andere Befehle im gleichen Menü, wie Speichern, Speichern unter, Schließen und Drucken würden nicht durch den Anwendungsdelegierten, sondern durch das Dokument, den Fenster-Controller oder das Objekt, das das Dokument/die Datei verwaltet, implementiert werden. Auf diese Weise wird der Befehl Öffnen so gut wie immer aktiviert sein (da der App-Delegierte so gut wie immer in der Antwortkette ist), aber Speichern, Schließen und Drucken werden nur aktiviert, wenn ein Dokument verfügbar ist, um diese Befehle zu verarbeiten.
Der Vollständigkeit halber sei erwähnt, dass die andere Möglichkeit, die Aktivierung von Menüelementen zu verwalten, die manuelle ist, bei der Sie den Aktivierungs-/Deaktivierungsstatus jedes Elements speziell festlegen. Ich glaube jedoch nicht, dass Sie dies für diese Aufgabe benötigen.