メニューをView Controller IBActionに接続できないのはなぜですか?
メニュー項目とビュー コントローラーがストーリーボードの異なるシーンにあるためです。シーンは、シーンがストーリーボードからロードされるときにインスタンス化されるオブジェクトの独立したグラフと考えることができます。異なるシーンのオブジェクトは、同時に読み込まれないため、絵コンテで一緒に接続することはできません。
お遊びとして、ストーリーボードのアプリケーション シーンにビュー コントローラーのインスタンスを作成してみてください。NSObject
そのためには、通常の古いインスタンスをシーンにドラッグしてから、そのタイプを設定する必要があります。これを行うと、期待どおりにメニュー項目からそのView Controllerに接続をドラッグできることがわかりますが、別のオブジェクトのまったく同じタイプの別のオブジェクトに接続をドラッグすることはできませんシーン。
注:動作することを十分に確認したら、追加したビュー コントローラーを忘れずに削除してください。ビューのないビュー コントローラーは、いんちきのないアヒルのようなものであり、ビュー コントローラーとそのビュー階層は独自のシーンにある必要があります。
私の 2 セントの推測では、アプリがドキュメント ベースであることに関係しているということです。
いいえ、それとは何の関係もありません。ドキュメントベースではないアプリでも同じ問題が発生します。接続しようとしているコントローラーがまったく異なる .xib ファイルにあるため、アプリがストーリーボードを使用する代わりに .xib ベースである場合にも、同じ問題が発生します。
マークがすでに説明したように、簡単な解決策はレスポンダー チェーンを使用することです。First Responderプロキシ オブジェクトはすべてのシーンの一部であるため、いつでも接続できます。メニュー項目を First Responder に接続すると、そのターゲットは になり、メニュー項目のアクション メッセージに応答するオブジェクトが見つかるまでレスポンダー チェーンnil
をたどるように指示されます。NSMenu
次に、メッセージをそのオブジェクトに送信します。