コントローラーオブジェクト
コントローラオブジェクトは、コーディネーターとして、あるいは1つ以上のビューオブジェクトと1つ以上のモデル·オブジェクトとの間の仲介として機能します。Model-View-Controller デザインパターンでは、コントローラオブジェクト(または、単に、コントローラ) は、ビューオブジェクトで - ユーザーが、ボタンをタップしたりクリックしたり、テキストフィールドにテキストを入力したりした時などに - ユーザーアクションや意図を解釈し、モデルオブジェクトに新しいデータや変更されたデータを知らせます。モデルオブジェクトが変更したり、たとえば、ユーザが、ファイルシステムに格納された文書を開けたり、それらを表示できるようにビューオブジェクトに新しいモデルデータを通信します。コントローラは、このようにビュー·オブジェクトが、モデルオブジェクトの変化について学び、それを指揮し、その逆も生じます。コントローラオブジェクトも、設定でき、アプリのタスクを調整し、他のオブジェクトの寿命を管理できます。Cocoa フレームワークは、3つの主要なコントローラの種類を提供しています:コントローラの調整、ビューコントローラ(iOS 上で)、および仲介コントローラ(OS Xで) です。
コントローラの調整
コントローラの調整は、アプリ全体の機能、またはその一部を監督し、管理します。それらは多くの場合、アプリ固有のロジックがアプリに注入されている場所です。コントローラ調整は、様々な機能を果たし、以下の事を含んでいます。
- delegate メッセージに応答して通知を観察します
- (ユーザーが、タップしたり、クリックしたときに、ボタンなどのコントロールによって送信される) アクションメッセージへの応答
- オブジェクト間や、他の設定タスクの実行、アプリケーション起動時などのような事を実行する間の接続を確立します
- "所有"(own) オブジェクトの寿命を管理します
コントローラを調整するのは、多くの場合、NSObjec のカスタムサブクラスのインスタンスです。OS X では、Cocoa アプリが、文書構造を活用できた場合、コントローラの調整は、多くの場合、NSWindowController か NSDocumentController オブジェクトです。iOS アプリでは、ビューコントローラは、多くの場合、コントローラを調整する役割を包含します。
ビューコントローラ
UIKit フレームと AppKit フレームワークは、(それぞれ、iOS と OS X 用) 共にビューコントローラクラスを提供しますが、これらのクラスは異なる特性を持っています。AppKit では、View Controller は NSViewController クラスのカスタムサブクラスのインスタンスです。View Controller は、nib ファイルにアーカイブされたビューを所有し、そのビューは、データオブジェクトを表します。View Controller は、そのビューのサブビューへの接続や更新を管理します。
UIKit では、View Controller はコンテンツの画面全体を表示するビューを管理します。それは、このビューへの参照を保持し、nib ファイルを作成したり、それからロードできます。コントローラは、このビューの表示、アプリ内の後続のビューへの移行を管理します。(ほとんどの場合、次のビューは右側からスライドしてきます。) ナビゲーションバーとタブバー、およびすべての関連する表示の動作はビューコントローラオブジェクトによって管理され、実装されています。ビューコントローラはまた、モーダルビューを表示し、メモリ不足の警告に応答し、向きの変わった時にビューを回転させます。
iOS の View Controller は UIViewController のサブクラスのインスタンスです。UIKit は、このような UITableViewController などの UIViewController のいくつかの特別な目的のサブクラスを提供します。コントローラがモデルとビューの間のデータの仲介をするにはフレームワーク・ビュー・コントローラのクラスを拡張する必要があります。ビューコントローラは、通常、フレームワーク・オブジェクトの多くの種類のデリゲートやデータソースオブジェクトです。
仲介コントローラ(OS X)
仲介コントローラは、ビューオブジェクトとモデルオブジェクト間のデータの流れを容易にします。ユーザーがビューオブジェクトに表示されている値を変更すると、仲介コントローラは自動的にストレージからモデルオブジェクトに新しい値を伝えます。モデルのプロパティがその値を変更したとき、仲介コントローラは、適切なビュー·オブジェクトが変更された値を表示したことを保証します。コントローラオブジェクトの他の型とは異なり、それらは非常に再利用可能です。これらや、他の理由のため、仲介コントローラは Cocoa バインディング技術の中心的な要素です。Interface Builder のライブラリから仲介コントローラをドラッグして、コントローラとそのビューオブジェクトとそのモデルオブジェクト間のバインディングを確立するために、これらのオブジェクトを構成します。仲介コントローラは、典型的には、抽象 NSController クラスの具象サブクラスのインスタンスです。
前提条件の記事
関連記事
既出の議論
モデル・ビュー・コントローラー
次の章
前の章