文書体系
文書体系は、ドキュメントベースのアプリケーションにおける役割とオブジェクトの通信経路を定義しています。文書体系を採用することで、効率的に、オープン、作成、保存、元に戻す、異なる種類のデータを表す文書を印刷するアプリケーションを作成できます。ドキュメントアーキテクチャに準拠して設計されたドキュメントベースのアプリケーションも、複数のドキュメントウィンドウを管理監視し、編集された状態を設定し、アプリケーション·ライフサイクル·メッセージを処理できます。Xcode 開発アプリケーションは、ドキュメントベースのアプリケーション用のプロジェクトテンプレートを提供します。
ドキュメントアーキテクチャは直接 Model-View-Controller 設計パターン(MVC) に基づいています。ドキュメントアーキテクチャに含まれる幾つかのオブジェクトは、ビュー·コントローラとモデル·コントローラなどのようなハイブリッドな役割を持ったものがあります。
文書は名前で識別されるデータのコンテナ
文書は、メモリ内にあるデータを所有・管理し、文書が開かれたり、保存される際、ユーザーが割り当てた名前でディスク·ファイルに書き込まれます。これは、複数のウィンドウ内にデータを表示し、編集可能な状態にします。文書は読み取り、そのデータを書き込めるだけでなく、印刷、復元、復元なのどデータに別の処理を行うことができます。文書データは、どんな種類のものであってもよく、実際には複数の種類のものであってもよいが、これらの種類は、形式的に指定しなければなりません。文書体系においては、NSDocument のオブジェクトが、ドキュメントを表します。
文書基本アプリ内のオブジェクトは階層関係持つ
3つのクラスが文書体系の一部です:NSDocument、NSDocumentController、そして NSWindowController です。これらのクラスのオブジェクトは、アプリケーションの文書を作成し、保存し、開き、管理するための作業を分割して調整します。これらは、階層になった 1 対多の関係に配置されています。NSDocumentController オブジェクト(ここでは 1 つのアプリケーションに 1 つだけが存在しています) は作成し、複数の NSDocument オブジェクトを管理します。NSDocument オブジェクトは、次に、複数の NSWindowController オブジェクトを作成し、管理します。
オブジェクトは、ドキュメントベースのアプリケーションで明確な役割と責任を持っています。
- NSDocumentController オブジェクトは、文書を作成して開く初期の役割を果たし、それらが、開くと、それらを管理・追跡します。また、"最近開いた" メニューを管理します。NSDocumentController インスタンスは、アプリケーションの起動、アプリケーションの終了、システムのシャットダウン、および Finder から書類を開いたり、印刷などのアプリケーションイベントに自動的に応答します。MVC デザインパターンでは、NSDocumentController オブジェクトが調整役のコントローラです。
- NSDocument オブジェクトの主な役割は、文書に関連付けられた永続的なデータを表現、操作、保存、ロードすることです。アプリケーションの情報プロパティリストにアプリケーションが読み書きできる文書の型を指定します。デフォルトでは、カスタムの NSDocument オブジェクトは、保存パネルとページレイアウトパネルを実行し、管理する方法を知っています。完全に実装された場合、オブジェクトは、保存し、開き、およびドキュメントを元に戻す要求に応答できます。それはまた、編集された状態を追跡し、文書データの印刷、取り消しを実行し、やり直すことができます。MVC デザインパターンでは、NSDocument は、モデルコントローラの、ハイブリッドな役割を果たしています。
- NSWindowController オブジェクトは、通常 nib ファイルに保存された文書に関連付けられた一つのウィンドウを管理します。文書に複数のウィンドウがある場合は、各ウィンドウは独自のウィンドウ・コントローラを持っています。各ウィンドウ·コントローラは、データが保存されたことを確認してからウィンドウを閉じる責任があります。MVC デザインパターンでは、NSWindowController オブジェクトは、ビューコントローラです。
通常は、NSDocumentController をサブクラス化する必要はありません。ドキュメントベースのアプリケーション用の Xcode のプロジェクトテンプレートは、メイン nib ファイルのファイルオーナーとしてクラスの既製のインスタンスを作成します。
あなたは、NSDocument のカスタムサブクラスを作成する必要があります。ドキュメントベースのアプリケーション用の Xcode のプロジェクトテンプレートは、サブクラス用の部分的に定義されたインタフェースと実装ファイルを提供します。実装ファイル内のコメントは、NSDocument のメソッドをオーバーライドするための提案を与えます。
NSWindowController のカスタムサブクラスの作成はオプションです。異なった nib ファイルをロードするためにクラスを拡張し、特別な設定タスクを実行したり、ウインドウのタイトルをカスタマイズできます。
文書体系は自動化アプリモデルをサポート
定期的に NSDocument クラスは、所定の位置に文書を自動保存します。それは、安全に保存することによって、文書ファイルを上書きします(つまり、一時ファイルにデータを書き込み、それから現在のファイルを置き換える事です)。もし文書に題がない場合、言い換えれば、ユーザーがファイルシステムに割り当てられた名前で保存しなかった場合、NSDocument は、~/Library/Autosave に情報を自動保存します。
前提条件の記事
関連記事
既知のディスカッション
マックアプリプログラミングガイド
サンプルコードプロジェクト
QuickLookSketch