20

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

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

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

+0

あなたがここで言わなかったことは、あなたがiOSから来ていて、今MacOS上でプログラミングを始めているということですか? –

+1

あなたはiOSの部分で少し後ろにそれを持っています。 'UIViewController'は' UIWindow'を管理しません。 'UIWindow'は' UIViewController'を管理します。通常、UIViewControllerは一度に1つしか表示されません(これは子ビューコントローラを持つiOS5で変更されていますが)、UIWindowのサブコンポーネントです。 UIWindowにはrootViewControllerプロパティがありますが、ViewControllerにはウィンドウプロパティはありません。さて、OSXでは、複数のNSWindowを持つことができますが、それでもそれぞれのNSViewControllerを管理します。つまり、階層は:Window> ViewController> Views – CrimsonDiego

+0

ありがとう、ええ、私はiOSの背景から来ています:)私は私のMacアプリケーション上に複数の別々のウィンドウがあると言うことができます。それぞれのウィンドウがwindowControllerまたはviewControllerにマップされるベットのアプローチは何ですか?たとえば、xCodeでファイルをダブルタップすると、新しいウィンドウが開きます。 – rustylepord

答えて

9

iPhone SDKとLeopard SDKを使用して、View Controller、つまりNSViewControllerとUIViewControllerを導入しました。名前が示すとおり、ビューの管理は

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

+0

私はiPhone開発でUIVIewControllerを使用しています。通常、UIViewControllerによって新しいスクリーンが管理されます。しかし、Macでは、これはNSWindowControllerを通して行われると想定するのは安全でしょうか? Appleのドキュメントを読むと、マルチウィンドウのすべてのアプリケーションがドキュメントベースのアプリケーションに属していると思われるようです。ですから、もしxcodeのようなマルチウィンドウアプリケーションを開発しているのであれば、これも文書化しなければなりませんか?公開されたAPIにはないことがわかっているので、IOSでもUIWindowControllerがあります。 – rustylepord

+0

ドキュメントベースのアプリケーションなしで複数のウィンドウを開くことができます。たとえば、永続的なパネル/インスペクタ... –

1

私はまたiOSから来て、もう少し前にMacアプリケーションのコーディングを開始しました。ほとんどの場合Appleのマニュアルから学習しました。

私の印象は、ほとんどの場合、NSViewControllerは必要ありません.1つの大きな例外は、GarageBandのようこそ画面のようなタブと複数のビューを持つウィンドウです。

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

これを取得したら、NSViewControllerで実験を開始してください。


UPDATE:ストーリーボードの導入は、Mac用があまりにもアプリ以来、Appleはラインでより多くの、ビューのプレゼンテーションロジックのほとんどが新しいNSViewControllerに古いNSWindowControllerから移行する必要があることを期待しているようですiOSアプリの仕組みについて説明します私はあくまでについてはあまり知識がありません。ここではで線を描画するか、どのような種類のコードをウィンドウコントローラに残すか(あるいは、それでもサブクラス化する必要があるかどうか)はわかりません。

+0

iOS上に複数のウィンドウを持つことはできないので、これまでの印象は1つのウィンドウで複数のView Controllerですが、異なるscreenaで作業しているという印象を受けます。画面はiOS上のViewcontrollerで描かれています。しかし、Mac OSXでは、複数のウィンドウを基本的に持つことができるので、基本的に各ウィンドウはウィンドウコントローラによって管理され、サブコンポーネントを管理するビューコントローラを含めることができます。 – rustylepord

関連する問題