iPhoneアプリを作ってみよう - Cocoaプログラミング

とりあえずCocoaで簡単なiPhoneアプリを作ってみます。うまくいくかどうかはわかりませんが。

和田

よし!まずはXcodeを起動するぞ!

和田

そしてファイルから新規プロジェクトを選択

和田

和田

よくわからないga

和田

よくわからないがView-Based-Applicationというので作ってみよう

和田

プロジェクト名は「iPhone」にしてみたよ

和田

和田

こんな画面がでてきたね。

和田

そしていきなりビルドして進行を!

和田

和田

画面上にデカいiPhoneのシミュレータが表示されたよねっ!

和田

ちなみに実機でテストするためには

和田

事前にApple Developer CenterにiPhoneの識別コードを登録しなきゃいけないのだ。

和田

和田

するとこんな感じでDeviceでアプリの実行ができるようになるのさっ!

和田

じゃぁとりあえずインターフェースビルダーでなんか適当に配置してみましょうか

和田

MainWindow.xibをダブルクリックするとインターフェースビルダーが立ち上がるよ

和田

うん。違ったね。

和田

iphoneViewController.xibだね。こっちがインターフェースのアレだね。

和田

んじゃこのあいだCocoaでやったHello Cocoa Worldみたいにテキストラベルとボタンを追加するぜ

和田

和田

こんな感じ?

和田

こんな感じ?

和田

そして保存してXcodeに戻るぜ

和田

そしてファイルを追加してみるぜ

和田

和田

和田

こんな感じかな?

和田

てくさんが居ないから不安…。

和田

まだ関連付けしてないけど一度様子をみてみよう

和田

和田

さっきインターフェースビルダーで配置したやつが表示されてるね

和田

#import <Foundation/Foundation.h>


@interface AppController : NSObject {

}

@end

和田

AppController.hをクリックするとこんなのが書いてますよね。

和田

よぅし。あとはテクさん待ちで…。

てくっち

おはようございます!

てくっち

い、いつのまにこんなところまでぇ!

てくっち

iphoneAppDelegateとかiphoneViewControllerに実装してもよかったですが

てくっち

自前でクラスを作ったんすね

てくっち

しかしあたしんちにはiPhone開発環境がない!orz

てくっち

したがって手探りでやってみます・・・

てくっち

まずは、さきほど追加したラベルとボタンのクラスを確認してくださいな和田さん

てくっち

UILabelと、UIButtonですねたぶん

てくっち

#import <UIKit/UIKit.h>


@interface AppController : NSObject {
    UILabel *label;
}
@property (nonatomic, retain) IBOutlet UILabel *label;
- (IBAction)push:(id)sender;
@end

てくっち

AppController.hは、これでいいんでないかな!

てくっち

そしてAppController.mは、

てくっち

- (IBAction)push:(id)sender
{
    label.text = @"Hello iPhone!";
}

てくっち

これでどうかしら…

てくっち

あとは、インターフェースビルダー上でAppContollerをインスタンス化してから、

てくっち

ApplControllerからLabelへ、接続、

てくっち

ボタンからAppControllerへ、接続。

てくっち

これで動くかしらー

和田

なんか動きそうなんですが

和田

和田

ボタンが押ささった状態で固まります…。解放しなきゃ駄目なんですかね…

和田

ちなみにエラーはでてません…orz

てくっち

がーーん!

てくっち

うまくいかない例になってしまいましたね!orz

てくっち

・・・

てくっち

勉強してきたわよ!

てくっち

上のような、NSObjectのサブクラスからではどうもうまくいきませんね…。

てくっち

UIViewControllerのサブクラス(今回はiphoneViewController)に実装するとうまくいきますよー。

てくっち

iphoneViewController.hを、このように

てくっち

#import <UIKit/UIKit.h>

@interface iphoneViewController : UIViewController {
  UILabel *label;
}
@property(nonatomic, retain) IBOutlet UILabel *label;
- (IBAction)push:(id)sender;
@end

てくっち

そしてiphoneViewController.mに、@synthesizeとpushメソッドの実装を。

てくっち

@implementation iphoneViewController

@synthesize label;

- (IBAction)push:(id)sender
{
  label.text = @"Hello iPhone!";
}
(以下略...)

てくっち

以上2つのファイルを保存してから、インターフェースビルダーへGO!

てくっち

iphoneViewController.xibを開き、

てくっち

てくっち

AppControllerのインスタンスはもういらないので削除する。

てくっち

てくっち

このFile's Ownerの正体は、iphoneViewControllerなんです。ここわかりにくいけどポイントです。

てくっち

iphoneViewControllerのlabelアウトレットwo

てくっち

接続します。

てくっち

つまりFile's Ownerからlabelへ、ctrlドラッグ。

てくっち

てくっち

そしてpush:アクションの接続。ボタンからFile's Ownerへ、ctrlドラッグ。

てくっち

てくっち

このように、push:アクションがボタンのTouch Up Insideイベントと結びつきます。

てくっち

これでいけるはずー。Xcodeに戻ってビルド&実行してみて〜ん。

和田

NSButtonからFile's Ownerに接続できません…。

てくっち

あ、なんかたまにそうなりますが、そのうちつながりませんか?w

てくっち

それか、File's Ownerの上でctrlクリックしてみて、Received Actionのところにpush:があるかどうか確認してみてください

和田

push無いです…

和田

あと何度やっても線がつながらないす…

てくっち

それは、iphoneViewController.hをチェックせよということですね

てくっち

- (IBAction)push:(id)sender;

てくっち

これいけてますか。

和田

保存されていなかったようですw

てくっち

うふw

和田

ぶじつながりましたよっ!

てくっち

わーい

てくっち

ビルド&実行を!

和田

orz

和田

ボタン自体がでてこないすw

てくっち

えーー

てくっち

どういうこっちゃ

和田

はじめからやってみますねw

和田

プロジェクトのタイプは何にすればよいんでしたっけ?

てくっち

View-Based-Applicationでいけますよ

てくっち

てくっち

うちでは、ほら!

和田

やっぱ変なかんじに…

和田

てくっち

がーーん!

和田

なんですかねぇ…

和田

インターフェースビルダーでいじるのはiphoneViewController.xibでよいんですよね?

てくっち

私も最初からやってみますー

和田

すいません…

てくっち

そうですー>iphoneViewController.xib

和田

う〜む

和田

なんででしょうねぇ…。

てくっち

うちではやっぱりうまくいきましたよ……

てくっち

ビルドのとき、なんか警告は出てませんか?

和田

いえ…

和田

プロジェクトください!

てくっち

はーい

和田

エラーがw

和田

和田

パスが違うぜっ!ってことですかね

てくっち

むぅこれはわからんw

和田

やっぱインテルMacですねw

てくっち

iphoneViewController.hと.mだけ元のプロジェクトと差し替えてもダメですかね

和田

さっきの駄目な結果と同じに…。

てくっち

うひょーん

てくっち

うちではいけてるのに・・・

てくっち

和田さんのやつ見せてもらいました。

和田

ふふ

てくっち

てくっち

これ間違ってますねw

和田

なにをっ!

てくっち

Outletsの、labelをLabelへ接続して、

てくっち

viewを、Viewに接続です。

和田

なんだとぅ!

てくっち

和田

でけたーー!!!

てくっち

Viewというのは、ここのViewですね。

てくっち

わーい

てくっち

おつかれさまでしたー!

和田

おいっす!

てくっち

デフォルトでViewにはつながってると思うので、途中で間違えて切ったんでしょう。