Hello Cocoa World - Cocoaプログラミング

いちばん簡単なCocoaアプリケーションを作ることから始めましょう。

てくっち

ボタンを押すと「Hello Cocoa World」と表示するアプリケーションを作ってみましょう!

てくっち

Xcodeを起動して、新規プロジェクト(Cocoa Application)を作成してください。

てくっち

プロジェクトの名前はお好きなものを。「Hello」とか。

和田

作りました!

和田

プロジェクト名は決めうちで指示したほうがいいんでないすかね

和田

お好きな物をよりは…。プロジェクト名はけっこういろんなとこに波及するし…。

てくっち

じゃあ「Hello」で!

和田

つくた!

和田

MacOS > Cocoa Applicationで良いのですね?

てくっち

そうですー

てくっち

じゃあインターフェースを作りましょう

和田

ふむふむ

和田

インターフェースビルダーを立ち上げるのですか?

てくっち

Xcode上で、MainMenu.xibをダブルクリック!

和田

虹色のぐるぐるが…

和田

あ、なんかでてきましたYO

てくっち

インターフェースビルダーが起動したでしょ

和田

MainMenuってのとWindowってのがでてきましたよテクさん

和田

全部英語です!

てくっち

すぐ慣れますよー

和田

だとよいのですが…

てくっち

メニューのToolsから、Libraryを選んでください

和田

開きましたっ!

てくっち

Libraryというタイトルのパネルが開きましたよね

和田

開きますた

てくっち

そのパネルから、必要な部品をWindowへドラッグ&ドロップするんです

和田

ほほぅ

てくっち

まずはボタンを。

和田

ボタンはなんかたくさん種類がありますよっ!

和田

どれがよいんでしょうか

てくっち

NSButtonと書いてるやつならどれでもいいんですが、まあ一番左上のやつを。Push Buttonってやつかな

和田

それをドラッグしてWindowの上にのっけるんですか?

てくっち

そうそう

てくっち

そうそう

和田

緑色の+マークがでてのっかりました!そうそうが多いですね

てくっち

うふ

てくっち

次はテキストフィールドです。

和田

ほほぅ

てくっち

部品を探すときは、パネルの下の検索フィールドが便利です

てくっち

textと入力してみてください。

和田

なんかでてきましたYO

和田

Text Fieldでよいですか?

てくっち

名前にtextを含む部品だけに絞り込まれたわけです

てくっち

Labelっていうのにしましょうか。

和田

はっつけました!

てくっち

ボタンはNSButton、テキストフィールドはNSTextFieldというオブジェクトです。

和田

ふむふむ

てくっち

さてこのアプリケーションでやらせたいことは、

てくっち

ボタンを押したときに、テキストフィールドに文字を表示させるという動作であります。

和田

ここでそれを言うんですね!最初に言わないであえて!

てくっち

実物を見ながらのほうがイメージしやすいと思いますので。

和田

ふむふむ!

てくっち

ボタンは、押されたときに、指定されたオブジェクトにメッセージを送るという働きをします。

てくっち

メッセージってなんでしょう…

和田

今回の場合、指定されたオブジェクトというのはLabelの事ですね!?

てくっち

いえ、違うんですよそれが

和田

ばかなっ!!!

てくっち

実は、もう1個オブジェクトがいるんです

てくっち

いまから自作するんです

和田

てくっち

自作すると、好みの動作をさせるコードがいくらでも書けるでしょ

和田

オブジェクトを作るってことですね!

てくっち

さて今回はどんな動作かというと

てくっち

「ボタンが送ってきたメッセージを受け取ったときに、テキストフィールドに文字列を書き込む」という動作ですね。

和田

メッセージを受け取って、文字列を書き込むオブジェクトってことですか先生

てくっち

そうですー

てくっち

さて作りますよー。Xcodeに戻ってちょ

和田

戻りました!Xcodeに!

てくっち

左の「グループとファイル」欄の中の、Classesを選択してください

和田

なんも表示されません!

てくっち

Classesフォルダはいま空っぽですからね。

和田

はい!空っぽです!

てくっち

メニューからファイル>新規ファイル...を選択して

てくっち

Cocoa>Objective-C classを選択。

和田

ファイル名と保存場所をきかれました!

てくっち

ファイル名は、AppController.mにしましょう。

和田

同時に.hファイルも作成しますかってチェックはどうしましょうか

てくっち

保存場所は自動的にこのプロジェクトになってるはずなので、そのままでよいです

てくっち

.hファイルも必要なので、チェックしてください。

和田

ファイルが2つでてまいりました

てくっち

Classesフォルダの中にできましたよね

和田

いいえ!

和田

Helloの直下にできてます!

てくっち

あ、ファイル作成の直前に、Helloが選択されちゃってたんですね

てくっち

じゃあその2つのファイルを、Classesフォルダへドラッグしといてください

和田

この2つのファイルはClassesに入れていいのですね!

和田

入りました!

てくっち

さて.hファイルのほうを選択してくださいな。

てくっち

なにやらソースが出ましたか。

和田

でてきましたYO

てくっち

{ }の中に、このクラスの変数を定義します。

和田

@interface AppController : NSObject {

和田

から始まるやつの中ですか?

てくっち

そうですそうです。その中に、

てくっち

IBOutlet NSTextField *field;

てくっち

と書いてください。

和田

これはどういう意味ですか先生

てくっち

変数fieldは、NSTextFieldクラスへのポインタを保持するという意味です。

てくっち

変数fieldは、NSTextFieldクラスへのポインタを保持するという意味です。

和田

2回言いましたね先生

てくっち

IBOutletは、インターフェースビルダー用の目印になります。

和田

これは、和田のスクリプトのバグですね先生。

てくっち

重要なことなので2回言ってもいいかと!w

和田

書きましたよ先生!

てくっち

そしてもう1個、}と@endの間に、

てくっち

- (IBAction)push:(id)sender;

てくっち

と書いてください。

和田

これはどういう意味ですか先生

てくっち

このクラス専用の関数の宣言なんです。クラス専用の関数を、メソッドと呼ぶんですが、

和田

ふむふむ

てくっち

さっき言ったメッセージというのは、じつはメソッド呼び出しということなんです。

てくっち

つまりですね

和田

メッセージを受け取る=メソッドを呼び出される ってことですか?

てくっち

そうです。

てくっち

「ボタンが、push:メッセージを、AppControllerクラスに送る」

和田

IBActionというのはインターフェースビルダー用の目印ですか?

てくっち

これはつまり「AppControllerクラスのpush:メソッドが呼び出される」ということです。

てくっち

そうです>IBAction

和田

IBはインターフェースビルダーの略なんですね!

てくっち

そうですね!

てくっち

さてここでAppController.hを保存してください。

和田

保存しましたっ!

てくっち

そしてインターフェースビルダーへGO!

和田

ひらきましたよ!

てくっち

ではLibraryパネルから、

てくっち

Objectっていう部品を探してください。

てくっち

青い立方体です。

和田

ありますた!

てくっち

それを、今度はWindowじゃなくて、MainMenu.xibのほうにドラッグ&ドロップしてください。

てくっち

目に見えないオブジェクトは、こっちに格納します。

和田

ふむふむ

和田

目に見えないものも扱えるのですねインターフェースビルダーは

てくっち

そうなんですー。単にうわべだけじゃないんです。

和田

うわべだけじゃないなんて、和田みたいですね先生

てくっち

そうそう

てくっち

さて次に

てくっち

メニューからTools>Inspectorを選んでくださいな

和田

サクッと流されたっ!

てくっち

うふ

和田

開きましたインスペクター?

てくっち

パネルが出ましたね

和田

でましたねなんか

てくっち

最初に出したLibraryパネルとInspectorパネルは、ずっと出しっぱなしにしといてください。

和田

へいっ!

てくっち

Inspectorパネルでは、各オブジェクトの細かい設定をしますです。

和田

へい!

てくっち

さてさっきドロップしたObjectを選択しといて、

和田

MainMenu.xibの中のやつですね

てくっち

はい

てくっち

で、Inspectorパネルの、上のタブ?の、右から2番目、iっていうやつをクリック

和田

クリックしたぜ

てくっち

パネルのタイトルが、Object Identityになってますか

和田

なってます!

てくっち

ではClassの右のポップアップメニューっていうんですか、それをクリックして、AppControllerを選んでください。

和田

セレクトボックスですね一般的には

てくっち

そ、そう言うんですね…

和田

AppControllerを選択するとなかペロッとでてきましたよ先生

和田

今日はなんか超大作ですね先生w

てくっち

そうですね…

和田

ActionとOutletのところになんか表示されましたよ!

てくっち

そうです。.hファイル内で、IBActionとIBOutletという目印は、ここで効いてくるんです。

和田

なるほどね!

てくっち

さて次が肝心なんですが、オブジェクト同士をつなぎますよ。

和田

ふむふむ

てくっち

Window上のボタンをctrlキーを押しながら、AppControllerまでドラッグ。

和田

いつのまにかObjectってのがAppControllerに変わってた!

てくっち

そうなんです。

和田

なんか青い線がピロッとでてきてつないでみました

てくっち

黒い小窓が現れるので、push:をクリック。

和田

クリックしました!

てくっち

これで、ボタンを押したときにpush:メッセージがAppControllerに送られることになります。

てくっち

次に、AppControllerからテキストフィールドへ、同様にctrl-ドラッグ。

てくっち

今度は向きが逆です。

てくっち

そして現れた小窓のfieldをクリックです。

和田

クリックしてやりましたよっ!

てくっち

これで接続は完了です!

和田

ほほぅ!

てくっち

インターフェースビルダー上で、保存しといてください。

てくっち

で、Xcodeにまた戻りますー

てくっち

今からpush:メソッドを実装します。

和田

戻りました

和田

ふむふむ

てくっち

実装は、.mファイルに書きます。AppController.mを選択してください。

和田

開きましたぜ

てくっち

@implementationと@endの間に、次のように書いてください

和田

どきどき

てくっち

4行あります。

てくっち

- (IBAction)push:(id)sender

てくっち

{

てくっち

[field setStringValue:@"Hello Cocoa World"];

てくっち

}

てくっち

以上です!

和田

複数行書けた方がよいですねw

和田

- (IBAction)push:(id)sender

和田

これはさっき.hに書いたのと酷似してますが

てくっち

ええ

和田

関連性はあるんでしょうか

てくっち

.hでは宣言、.mでそれを実装、という構造ですね

和田

変数宣言と同じようなものでしょうか

てくっち

そうですね、.hでは関数(メソッド)の宣言ですね

和田

なんとなくわかってきたような気がしますね!

てくっち

[field ...の部分は、また次回解説しましょうかね・・

てくっち

これで準備完了です!

和田

え”〜w

和田

ビルドしても良いでしょうか…

てくっち

簡単に言うと、オブジェクトfieldに、setStringValue:メッセージを送る。その引数は@"..."、ということですね

てくっち

ビルドの前に、ちょっとだけ、、

和田

へ、へい

てくっち

インターフェースビルダーに戻って、Labelのサイズを、広げといてください…

和田

やっぱりw

和田

Helloしかでないからおかしいなと思いましたよっw

てくっち

全部見えないと悲しいから…

和田

無事ボタンを押すとHello Cocoa Worldが表示されましたよっ!

てくっち

ハアハア

てくっち

できましたね!

和田

ハァハァ

てくっち

今日の作業を何度かやって慣れてみてくださいな!

和田

OK牧場!

和田

iPhoneでもなんかできる気がしてきたんで

和田

iPhoneで同じような事をやらせてみますよっ!

てくっち

うふ

和田

今回のでインターフェースビルダーとクラスとの繋がりがより理解できた気がしますよっ!

てくっち

最初の壁を越えましたね!

和田

あざっす!