タイトル今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(6)既存のnibファイルの設定を見てみるカテゴリーユーザインタフェース, Cocoa, 今から始めるCocoaプログラミング
作成日2001/12/25 18:27:16作成者新居雅行
文書ファイルを伴うアプリケーションのフレームワークは、以下の「Document Based Applications」というところに解説がある。以前はNSDocumentクラスにあった解説がこちらに移動してきているわけだ。今回の一連のシリーズでは、もちろん、ここに書かれていることを詳しく説明するということを行っているわけだが、ここで、CustomInfo.plistファイルを作成するようにという説明がある。「The Document Types Info Property List」ところでそのファイルの作成フォーマットが記載されているが、この情報を利用して、文書ファイルの認識などを行うとされている。

◇Document Based Applications
 http://devworld.apple.com/techpubs/macosx/Cocoa/TasksAndConcepts/ProgrammingTopics/Documents/index.html

しかしながら、いろいろ試した結論から言えば「CustomInfo.plistは不要」ではないかと思われる。理由としては、まずプロジェクトの「ビルド設定」にある各種の設定とCustomInfo.plistの内容は重複している。つまり、CustomInfo.plistに与えるべき内容はビルドしたアプリケーションのInfo.plistファイルですべて記述されているはずのものなのである。また、Developer ToolsにはSimpleToolbarというサンプルアプリケーションがあるが、このサンプルではCustomInfo.plistは作られていない。さらに、CustomInfo.plistを作らないで動かしても、前回に説明をしたように、特に問題は見られない。CustomInfo.plistはもしかしてYellowBox時代には必要だったものの、今現在はすでに不要となってしまった情報ファイルなのではないかとも思ってしまうがいかがなものだろうか? つまり、ドキュメントの書き直しが行われていないという可能性が高いと考えられるのである。

それでは、Document-based Applicationのテンプレートで作られたプロジェクトにあるnibファイルを見ながら、テキストエディタに必要な設定を見て行くことにしよう。まずは、Englishの言語しかないが、ある程度作ってからローカライズということを考える。nibファイルは2つあるが、MainMenu.nibは起動時にロードされるものだ。開いてい見ると、次の通り、メニューの定義「MainMenu」がある。そして、メニューの各項目は、First Responderというインスタンスに結合されている。

◇MainMenu.nibの定義内容
 

ここでのFirst Responderは、ユーザからの応答を受け付ける窓口と考えればよい。たとえば、Saveメニューを選択すると、First ResponderにsaveDocumentというメッセージが投げられる。First Responderは、現在のアプリケーションの状況を調べて、そのメッセージをさらに有効なインスタンスに引き渡す。たとえば、テキスト編集中だったら、テキスト編集のコンポーネントに渡すのであるが、たいがいはそこでは何もしないので、ビジュアルコンポーネントの階層に従って、ウインドウやドキュメントに伝達され、そこでsaveDocumentが用意されていて実際のファイルへの保存作業に移るといった仕掛けになっているわけだ。こうしたユーザから内部コンポーネントへのリクエストの伝達という点は複雑な仕掛けではあるが、Cocoaのさまざまな機能を使う上ではあまり意識しなくてとりあえずはうまく動くような状態になっている。なお、MainMenu.nibのFile’s Ownerはここではアプリケーション自体のインスタンスとなっている。とりあえず、MainMenu.nibは特に変更をしないで先に進むことにしよう。
次に、MyDocument.nibを見て見よう。これが文書ファイルを総合的に管理する仕組みを提供するのである。まず、File’s Ownerについてチェックしたいが、Infoパレットを表示して、Attributesをチェックしよう。つまり、このファイルの元になっているクラスがどのクラスなのかを示す設定であり、MyDocumentクラスが選択されている。MyDocumentクラスの実体は、ソースファイルのMyDocument.jaraである。このあたり同じ名前で種類が違うものが並ぶが何がどこでつながりがあるのかをきちんと理解したいところだ。

◇MyDocument.nibの定義内容
 

MyDocument.nibにあるWindowは、文書ファイルを表示するウインドウの実際のユーザインタフェースを定義しておくオブジェクトである。
続いて、MyDocument.nibファイルの初期設定を確認しておこう。まずは、File’s Ownerを選択して、InfoパレットでConnectionsを見ると、File’s OwnerからWindowにリンクしたOutletのwindowがある。つまり、ここでは、MyDocument.javaというプログラムソースで、実際に表示されているウインドウを参照することを可能にする。今回のサンプルではここまでは使わないが、ウインドウの参照は細かな処理を組み込むと必ず必要になる。そのときは、すでにOutletが定義されていることを理解しておく必要がある。

◇File’s OwnerからWindowを参照するOutletが定義されている
 

一方、Windowについても同様にConnectionsを見てみると、delegateというOutletから、MyDocumentつまりFile’s Ownerに対してリンクが設定されている。NSWindowクラスはデリゲートの処理が可能となっており、規定のイベントなどでデリゲートされた別のクラスのメソッドを呼び出すことができる。その規定のイベントに対応するメソッドを、ここではMyDocument.javaに記述することができるということだ。別に異なるインスタンスを用意してもかまわないのだが、その場合はリンクの設定を変更する必要がでてくる。このリンクもやはり今回のサンプルでは使わないとは言え、やはりより進んだ機能を組み込みたいときには、この初期設定があることを知っておいた方がいいだろう。

◇WindowのデリゲートはMyDocumentのインスタンスに設定
 
(この項、続く)
関連リンク