Cocoaでいこう! Macらしく 第24回
Yoshiki(DreamField)
この記事は、MOSAが発行するデベロッパ向けのデジタルマガジンMOSADeN 第85号(2003年10月21日発行)に掲載された記事です。2〜3ヶ月遅れで、ここに掲載して行きます。

今回は前回からの続きです。

起動時にウィンドウが開かないようにしよう(中編)

いつも通り、ProjectBuilderでTinyView.pbprojを開いて下さい。そして、Resourcesの中のMainMenu.nibをダブルクリックして、InterfaceBuilderで開いて下さい(fig.01)。

[fig.01] Resourcesの中のMainMenu.nib

するとfig.02の様な画面になったはずです。

[fig.02] InterfaceBuilderでMainMenu.nibを開いたところ

ここに表示されているMainMenuの中身を編集しますと、メニューバーの中を変更できるのですが、今回はこれはほっておいて、nibファイルウィンドウのClassesタブを選んで下さい。するとクラスの一覧がカラムビューで表示されます(fig.03)。

[fig.03] Classesの表示

表示された時に、最初からNSApplicationクラスが選択されているのは、Classesタブを選ぶ直前にInstancesでFile's Ownerが選択されていたからです。File's OwnerがNSApplicationクラスなので、これが選択されています。なお、ここで違うクラスを選択しても、File's Ownerのクラスが変更されるわけではありません。あくまで、Classesタブを選ぶ直前にInstancesで選んでいたオブジェクトのクラスが、最初に選択されているだけです。すぐ左側のカラムではNSResponderクラスが選択されていますが、これはすなわちNSApplicationクラスはNSResponderクラスを継承していることを意味します(リファレンスを参照してみてください。そうなっていますから)。では、スクロールバーを一番左側まで持っていってみて下さい。一番左側まで持って行くと、NSObjectクラスが選択されていることが分かります(fig.04)。

[fig.04] Classesの大元はNSObjectクラス

今まで説明していませんでしたが、実を言えば、Objective-Cでは全てのクラスは必ずルートクラスを継承しています。NSObjectはそのルートクラスで、インスタンス化やリファレンスカウンタ等、あらゆるクラスに必用な機能を実装しています。

※Objective-Cの場合、Javaと違ってルートクラスは一つである必要はなく、また自由に作成することもできますから、必ずNSObjectと決まっているわけではありません。ですが、ルートクラスを作るのはとても大変なことですから、独自に実装することは、普通は無いでしょう。標準でNSProxyという別のルートクラスもありますが、これは分散オブジェクトを実現するという、特殊な用途のために使うものです。従いまして、ほとんどの場合、ルートクラスはNSObjectと思って差し支えありません。

それでは、今回実装するクラスについて考えてみましょう。今回実装するクラスは、applicationShouldOpenUntitledFile:というメソッドが実装されていれば良い、ただそれだけです。つまり、他のクラスを継承する必用がありません。この場合、ルートクラスであるNSObjectを継承すれば良いことになります。名前はAppControllerとすることにします。

では、始めましょう。nibファイルウィンドウで、NSObjectクラスを選択して下さい(fig.05)。

[fig.05] NSObjectクラスを選択する

選択したら、ClassesメニューからSubclass NSObjectを選んで下さい(fig.06)。

[fig.06] Subclass NSObjectを選ぶ

すると、NSObjectクラスを継承したMyObjectクラスが生成されます(fig.07)。ただしこの時点では、まだ実体はありません。

[fig.07] MyObjectクラスが生成される

名前をAppControllerに変更して下さい(fig.08)。

[fig.08] 名前をAppControllerに変更する

変更しましたら、AppControllerが選択されていることを確認してから、ClassesメニューのCreate Files for AppControllerを選んで下さい(fig.09)。

[fig.09] Create Files for AppControllerを選ぶ

すると、AppControllerクラスのファイルの生成を指示するパネルが現れます(fig.10)。

[fig.10] ファイルの生成を指示するパネル

Create filesは生成するファイル、Insert into targetsはそれを加えるプロジェクトです。Chooseボタンを押して下さい。すると自動的にProjectBuilderに操作が移ります。プロジェクトウィンドウを見て下さい。AppController.hとAppController.mが加わっているはずです(fig.11)。

[fig.11] 加わっているAppController.hとAppController.m

この様に、最初からnibファイルに組み込むことを前程としたクラスを作る場合、InterfaceBuilderから生成した方が簡単です。

この後AppController.mの中身を実装して行くことになりますが、この続きは次回です。

前頁目次次頁