これはこの質問の複製です。
一部のCocoaファンダメンタル(特にコントローラーとデリゲート)を把握するのに苦労したので、基本的なチュートリアルを完了することにしました。私は「あなたの最初のMacアプリケーション」を見つけ、「次へ」の段階まですべてうまくいきました。これは私がそれについて理解していないおそらく基本的なことの束です:
>>
- 「新しいコントローラークラスを作成し、トラックとユーザーインターフェイスを管理するためにアプリケーションデリゲートからこの新しいクラスに移動します。」
...別のコントローラークラスを作成する意味は何ですか?私はMVCパターンを取得し、過去にそれを使用しましたが、コントローラーとデリゲートを別々に配置する場所がわかりません。
- 「nibファイルにコントローラークラスのインスタンスを作成し、アプリケーションデリゲートとの間ではなく、そのインスタンスとの間で適切な接続を確立します。」
...その時点までは、NSWindowControllerのサブクラスを作成し、.xibファイルでウィンドウをこのクラスのオブジェクトにする必要があることを宣言するだけだと思っていました。今、私は混乱しています。コントローラーはどのクラスにする必要がありますか?どのインターフェース(申し訳ありませんが、プロトコル)に準拠する必要がありますか?それが私がアウトレットを指す単なるクラスである場合、もう一度—私がすでに持っているデリゲートとの違いは何ですか?
- 「アプリケーションデリゲートから新しいコントローラーオブジェクトへの接続を追加します。アプリケーションの起動が終了したら、アプリケーションデリゲートはウィンドウを表示するためにコントローラーにメッセージを送信する必要があります。」
...メッセージは何ですか?私が見つけた最も近いものはshowWindow:NSWindowControllerクラスのメッセージですが、これを書くと:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[trackController showWindow:self];
}
AppDelegateのapplicationDidFinishLaunchingメソッドで、「受信者タイプ'TrackController'、たとえばメッセージは前方宣言です」というエラーが表示され、それが何を意味するのか理解できません。
それ以上に—空白のプロジェクトで、すべてを作成するコードなしでこのウィンドウが表示される場合、なぜこのウィンドウを表示するようにメッセージを送信する必要があるのでしょうか。どういうわけか、このデフォルトの動作をオフにして、このウィンドウのインスタンスを自分で作成する必要がありますか?