今回は前回からの続きです。
いつも通り、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の中身を実装して行くことになりますが、この続きは次回です。