1

これはこの質問の複製です。

一部のCocoaファンダメンタル(特にコントローラーとデリゲート)を把握するのに苦労したので、基本的なチュートリアルを完了することにしました。私は「あなたの最初のMacアプリケーション」を見つけ、「次へ」の段階まですべてうまくいきました。これは私がそれについて理解していないおそらく基本的なことの束です:

>>

  • 「新しいコントローラークラスを作成し、トラックとユーザーインターフェイスを管理するためにアプリケーションデリゲートからこの新しいクラスに移動します。」

...別のコントローラークラスを作成する意味は何ですか?私はMVCパターンを取得し、過去にそれを使用しましたが、コントローラーとデリゲートを別々に配置する場所がわかりません。

  • 「nibファイルにコントローラークラスのインスタンスを作成し、アプリケーションデリゲートとの間ではなく、そのインスタンスとの間で適切な接続を確立します。」

...その時点までは、NSWindowControllerのサブクラスを作成し、.xibファイルでウィンドウをこのクラスのオブジェクトにする必要があることを宣言するだけだと思っていました。今、私は混乱しています。コントローラーはどのクラスにする必要がありますか?どのインターフェース(申し訳ありませんが、プロトコル)に準拠する必要がありますか?それが私がアウトレットを指す単なるクラスである場合、もう一度—私がすでに持っているデリゲートとの違いは何ですか?

  • 「アプリケーションデリゲートから新しいコントローラーオブジェクトへの接続を追加します。アプリケーションの起動が終了したら、アプリケーションデリゲートはウィンドウを表示するためにコントローラーにメッセージを送信する必要があります。」

...メッセージは何ですか?私が見つけた最も近いものはshowWindow:NSWindowControllerクラスのメッセージですが、これを書くと:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    [trackController showWindow:self];

}

AppDelegateのapplicationDidFinishLaunchingメソッドで、「受信者タイプ'TrackController'、たとえばメッセージは前方宣言です」というエラーが表示され、それが何を意味するのか理解できません。

それ以上に—空白のプロジェクトで、すべてを作成するコードなしでこのウィンドウが表示される場合、なぜこのウィンドウを表示するようにメッセージを送信する必要があるのでしょうか。どういうわけか、このデフォルトの動作をオフにして、このウィンドウのインスタンスを自分で作成する必要がありますか?

4

1 に答える 1

1

コントローラクラスのポイント:コントローラとモデルの要素およびそれらのユーザーインターフェイスの比率を維持することをお勧めします。単純なアプリケーションの場合、すべてのコードをに入れることができますAppDelegate。より複雑なアプリを開発したら、コードをからAppDelegateさまざまなコントローラーにオフロードする必要があり、モデルを維持するためのさまざまなビューが得られます。私は、問題を管理しやすくするために、ビューとコントローラーの間に1:1の関係を維持しようとしています。

コントローラは、UIコンポーネントに代わって機能の特定のビットを処理するために、さまざまなプロトコルを実装できます。その後、それらはそのコンポーネントの代理人になります。たとえば、ビューにがありNSTextView、ユーザーがテキスト内のリンクをクリックしたときを知りたいとします。その後、コントローラーは<NSTextViewDelegate>メソッドを実装および実装できtextView:clickedOnLink:atIndex:ます。そうすることで、それはあなたの代理人になりましたNSTextView

コントローラーはどのクラスにする必要がありますか?アプリの構造化に利用できるさまざまなコントローラークラスがあります。私は。だけを使用する傾向がありますNSViewController。このコントローラーは、NSViewに表示されるインスタンスを処理できますNSWindow。によってサポートされるビュー階層をNSView使用すると、粒度のさまざまなシナリオ(巨大で複雑なコントローラー、またはきめ細かい-それはあなた次第です)を決定できます。

前方宣言の問題については、この投稿を参照してください。

ウィンドウの表示に関する最後の質問がわかりません。どうやら、デフォルトのテンプレートは、ウィンドウを表示するための配管コードを生成します。そのコードを使用することも、独自のコードをロールすることもできます。私があなたを正しく理解していなかったかどうかを明確にしてください...

于 2012-06-08T00:35:32.070 に答える