単純なものが欠けているに違いありませんが、見えません。まず、セットアップ:
DATreeView、のサブクラスNSViewDATreeViewController、のサブクラスNSViewControllerMainMenu.xibDATreeViewControllerからビューをロードするように構成された のインスタンスがありますDATreeView.xibMainMenu.xibのインスタンスもありDendreaAppDelegate、アウトレットがあります (のインスタンスDATreeViewControllerに配線されています) 。MainMenu.xibDATreeViewControllerDo Something!doSomething:、ファーストレスポンダにメッセージを送信するために接続されたメニュー項目です。- 偶然で
DATreeViewControllerはなく、 というアクションがありdoSomething:ます。
私が望むのは、Do Something!メニュー項目が でdoSomething:アクションをトリガーするDATreeViewControllerことです。ターゲット/アクション接続を直接設定することはできないふりをしましょう。ここで立ち止まって質問します。私の設計は完全に間違っていますか? 私がやろうとしていることは、私の神の目に愚か/悪/恥をかかせる可能性がありますか?
いいえ?偉大な。さて、私の人生では、メニュー項目をアクティブにすることはできません。違いがある場合は、Snow Leopardでこれを行っています。
NSViewとの間の適切な統合を実現するためにNSViewController、たとえばレスポンダー チェーンの管理など、 Matt Gallagher の例に従いましたが、実質的な変更が 1 つNSViewありsetViewController:ます。DATreeViewControllerのloadViewメッセージ。私が知る限り、次のコードを実行した後applicationDidFinishLaunching:
NSView *view = self.treeViewController.view;
[self.window.contentView addSubview:view];
レスポンダー チェーンは期待どおりに設定されます。つまり、次のようになります。
NSWindow < NSView < DATreeViewController < DATreeView
レスポンダ チェーンの一部でDATreeViewControllerあり、 に応答しdoSomething:、検証を実装していないため、Interface Builder を使用してDo Something!メニュー項目を First Responder プロキシに接続するだけでよいと思っていました。をdoSomething:アクションとして使用すると、メニュー項目が自動的にアクティブになります。
私は何を間違っていますか?かけがえのない支援をありがとうございました!