あなたは正しい考えを持っています。 Enabling Menu Itemsで説明されているように、メニュー項目を有効にするには2通りの方法があります。自動有効化機能を使用すると、システムはレスポンダチェーンをチェックして、メニュー内の各項目のアクションを実装するオブジェクトを探します。適切なアクションを持つレスポンダを見つけたら、そのメニュー項目を有効にします。
したがって、メニュー項目を最初のレスポンダに接続し、FileMenuController
クラスで同じアクションを実装しました。あなたがする必要がある他のものは以下のとおりです。
- それは
FileMenuController
のインスタンスを作成し、それがレスポンダチェーンの一部だということを確認してくださいレスポンダチェーン
- の一部とすることができるように、NSResponderから
FileMenuController
継承していることを確認してください。
実際には、ファイルメニューを管理するためだけに別のオブジェクトは必要ありません。代わりに、通常はレスポンダチェーンの一部であり、ドキュメントを開くことは、アプリケーションが(ウィンドウやビューとは反対に)何かであるため、アプリケーションのデリゲートに通常-openDocument:
アクションを配置します。 Save、Save As、Close、Printなどの同じメニュー内の他のコマンドは、アプリケーションデリゲートではなく、ドキュメント、ウィンドウコントローラ、またはドキュメント/ファイルを管理するオブジェクトによって実装されます。このようにして、Openコマンドはほとんど常に有効になります(アプリケーションデリゲートは常にレスポンダチェーン内にあるため)。ただし、Save、Close、Printは、これらのコマンドを処理するためのドキュメントがある場合にのみ有効になります。
完全性を保つために、メニューアイテムを有効にするもう1つの方法は手動で行われ、各アイテムの有効/無効のステータスを具体的に設定します。私はこれがあなたがこの仕事のために欲しいものだとは思わない。