web-dev-qa-db-ja.com

NSWindowControllerとNSViewControllerの違い

私はiOSのバックグラウンドから来て、Cocoaを学び始めています。 iOSでは、iPadiPhoneのターゲットが複数ない限り、通常は1つのウィンドウで、UIViewControllersを使用して画面を管理します。ほとんどの場合、すべての新しい画面はUIViewControllerにマップされます。

ただし、カカオでは、これは、新しい画面/ウィンドウがNSWindowによって管理され、そのサブコンポーネントがNSViewControllerによって管理されるという逆のようです。したがって、複数のウィンドウアプリがある場合は、ウィンドウごとに個別のNSWindowControllerを用意する必要があります。

このアプローチは正しいですか、それとも私は誤解していますか?

28
rustylepord

IPhoneSDKとLeopardSDKで、彼らはビューコントローラー、またはNSViewControllerとUIViewControllerを導入しました。彼らの名前が示すように、彼らがしていることはビューを管理することです

ビューコントローラは、ビューを管理するためのものです。 UIデザインの現在の傾向は、シングルウィンドウ、マルチビューです。つまり、1つのウィンドウがあり、その内部には、さまざまな目的のために設計されたさまざまなビューのグループを入れ替えることができます。したがって、View Controllerは、確立されたパターンのプログラマーのためにこれらを処理します。プラットフォームはシングルウィンドウおよびマルチビューモデルに基づいているため、現在、ビューコントローラはiPhoneおよびiPodtouchプログラミングにとって非常に重要です。ただし、MacではViewControllerの使用があまり一般的ではないようです。 NSWindowControllerのようなウィンドウコントローラーはどうですか?対応するUIWindowControllerは、iPhoneおよびiPod touch環境には存在しません。これらの環境にはウィンドウが1つしかないためです。ビューコントローラとは異なり、NSWindowControllerはドキュメントベースのプログラム用です。さて、ドキュメントベースのプログラムは複数のウィンドウを使用できます。したがって、Appleのドキュメントにあるように、NSWindowControllerはドキュメントベースのプログラム用であると考えるのが妥当です。

12
Bhavika

私もiOSから来て、しばらく前にMacアプリのコーディングを始めました。主に、Appleのドキュメントから学びました。

私の印象では、デスクトップではNSViewControllersはほとんど必要ありません(1つの大きな例外は、GarageBandのウェルカム画面のように、タブと複数のビューを備えたウィンドウです)。

ほとんどの場合、ウィンドウごとに1つのNSWindowControllerがあります。まず、NSWindowNSWindowController(およびドキュメントベースのアプリを作成している場合はNSDocument)の関係を学びます。

正しく理解できたら、NSViewControllerで実験を開始します。


PDATE: Macアプリでもstoryboardsが導入されたため、Appleは、ほとんどのビュープレゼンテーションロジックを移行する必要があると予想しています。古いNSWindowControllerから新しいNSViewControllerまで、iOSアプリの構造に沿ったものです。正確なwhere線を引く、またはウィンドウコントローラにどのような種類のコードを残す必要があるか(またはサブクラス化する必要があるかどうか)。

2
Nicolas Miari