前へ Xcc>Cocoa 次へ

2、第三者を用意し、そちらと連絡しあう。

 この第三者は1から作ることになる。つ〜か、ウィンドウに置くわけにもいかんし。第三者とかビジュアル的にわからんし。

 ただし、基本はやっぱClass作成だからMainMenu.nib(English)ウィンドウのClassesタブを使うわけだ。というわけでリストを左端までスクロールさせると現れるのが、

NSObject

 Cocoaで扱うObjective-C用オブジェクトは、NSObjectからサブクラス化されないといけないので、1から作る場合でも必ずNSObjectからサブクラス化する必要がある。

 例によって

Classes>Subclass NSObject

はい、MyObjectのできあがり〜。

NSObject

 あらゆるオブジェクトの祖先。テキストフィールドもスライダーも上をたどるとNSObjectに行き着く。

喧嘩売っとんのかInterfaceBuilder。

リストからMyObject選んでからClassesメニュー開くと...

アクションの追加

 ここらへん、あきたので書きません。スライダーやテキストフィールドでやったようにアクションを追加し、これにスライダーやテキストフィールドを結びつけるだけです。

 と言いたいんだけど、ひとつ大問題。ね〜からMyObject。ドロップしようがね〜し。

 MainMenu.nib(English)ウィンドウのClassesタブのリストにある MyObject にドロップしようとして、スライダーやテキストフィールドをControl+クリックしてClassesタブのリストにドラッグしようとした君。そうだね、ClassesタブがInstancesタブに切り替わられるね。そ〜なんすよ切り替わるんすよ。

 でも、ここに重大な手がかりあるわけですわ。もう一度 MainMenu.nib(English) ウィンドウの Classes タブのリストにして MyObject を選択してから Classes メニューを開くと出てくる

Classes>Instantinate MyObject

こいつを選ぶと〜

MyObjectきた〜♪

Instantinete

 インスタンス化。クラスが分類であるのに対し、その具体的な個体がインスタンス。カップ麺というクラスに対し、カップヌードルカレー味が一つ、シーフード味が2つあれば、カップ麺クラスのインスタンスが3つあると表現できる。

解除。

 つ〜わけで、こいつにスライダーもテキストフィールドも Control + ドラッグ&ドロップだ。ただしスライダーもテキストフィールドも myAction はお互いに結びついたままなので、これを解除しておく。

 解除するにはテキストフィールドならテキストフィールドを選択して Inspector ウィンドウを出して Connections メニュー & Target / Action タブのリストにある myAction: を選んで右下の Disconnect (つなぐときは Connect になってたやつ)ボタンを押す。

 スライダーも同じように解除して、両方とも MyObject に Control + ドラッグ&ドロップする。

 二重に結びつけても問題ない。前のソースでもあったように、送り手は識別できる。というかテキスト作ってなかった。MainMenu.nib (English) ウィンドウの Classes タブのリストにして MyObject を選択してから

Classes>Create Files for MyObject

でできた

MyObject.m

をXcodeで開くと

- (IBAction)myAction:(id)sender
{
}

ちゃんとありますなmyAction。でも、またここで問題なわけだ。

 sender で送り手がわかっても、それに対応する相手がわからない。いや、わかってるけどmyAction内で指定する方法がない。 self は自分を指していたけど、あれはスライダーやテキストフィールドだから意味があったわけで、 MyObject では意味がない。

 この場合、 sender がテキストフィールドならスライダー、スライダーならテキストフィールドを更新する必要があるわけで、つまり MyObject はスライダー、テキストフィールドを認識している必要がある。

その方法が...