Apple iPhone 3GとiPhone SDKを使ってアプリケーションを開発、公開するための情報。
更新:10/04/10 | iPhone SDK でチュートリアル | iPone SDK
チュートリアル
いよいよチュートリアルの開始です。
	基本的には備忘録ですので、個人的に時間を使って体得した内容を形として残すための情報という位置づけです。
	将来的にAppStoreでの公開も見据えたいので有る程度まともなものに仕上げたいと考えます。まずは、Todoアプリを作成します。
TodoアプリはAppStoreにも多数存在しますが、個人的に必要な機能を満たしているものがないので作るのに容易で作った後もある程度活用の道があるアプリケーションと言うことで最適と判断しました。
Navigation-Based Application
まずは、Xcodeを起動してプロジェクトを新規作成します。Xcodeの準備が出来ていない方は、iPhone SDKの紹介から参照してください。
通常はアプリケーションの設計から入るのが定石と思いますが、何をどんな風に実装できるかも分からない状態なのでコーディングしながら仕様は決めていきます。
取り敢えず、Navigation-Based Applicationというテンプレートを使ってプロジェクトを作成することで、テーブルをベースにしたアプリケーションを直ぐに作り始めることが出来ます。
タイトルやボタンを付ける
作成されたアプリケーションは直ぐにビルド&シミュレーター上で実行することが出来ますが、いわゆるのっぺらぼうの状態です。
ただ、最上部にナビゲーションバーが存在していることに気づくはずです。このナビゲーションバーにタイトルを付けたり、ボタンを配置することから始めてみます。
ソースコードを構成するファイルは、クラス毎に作成されます。頭文字は大文字です。一覧を見ると、最初から存在するファイルの中に、
- RootViewController.h
 - RootViewController.m
 
という、2つのファイルが存在しているはずです。
拡張子hのファイルはヘッダーファイルで、このクラスの骨組み、概要情報が含まれています。mのファイルはメインファイルで、このクラスの実装部分がコーディングされていきます。つまり、Objective-Cではクラス毎にh、mという拡張子のファイルが個別に作成されることになります。
RootViewController.mをクリックすると、Xcodeのビューにコードが表示されます。
色々と不思議な呪文が書かれていると思われる方もいるかも知れませんが、随時紹介しますのでまずは次のキーワードを探してください。
- (void)viewDidLoad {
マイナスから始まっているキーワードはインスタンスメソッドで、このクラスから作成されたインスタンス毎に用意されるメソッドです。プラスから始まるものもいずれ見かけるかも知れませんが、これはクラスメソッドで作成されたインスタンス全てから共通して呼び出されるメソッドです。クラスメソッドの代表例はクラスからインスタンスを作るallocメソッドがあります。
頭の(void)は、このメソッドに戻り値がないことを表しています。
呼び出し側に何らかの値を戻すメソッドは、()の中に戻り値の型が入ります。
viewDidLoadは、予約されているメソッド名でその名の通りこのビュー(=テーブルベースのビュー)がiPhoneに読み込まれた直後に呼び出されるメソッドであることを意味しています。そのため、大概の場合初期値の設定などを行うコードがこのメソッドの中に書かれます。
{}で囲まれた中にタイトルやボタンの追加を実装するコードを書いていきましょう。
// Add the Insert button
UIBarButtonItem *addButton= [[[UIBarButtonItem alloc]
initWithTitle:NSLocalizedString(@"Add", @"")
style:UIBarButtonItemStyleBordered
target:self
action:@selector(addAction:)] autorelease];
self.navigationItem.rightBarButtonItem = addButton;
前段のコードは、タイトルを"Todo"に設定することを意味しています。
後段はのコードは、左側に編集ボタンを配置し、右上側に"Add"と称されるボタンを配置する事を意味しています。
これらのコードには、Objective-Cにおける様々なコーディングルールをかいま見ることが出来ます。まずは、この基本ルールについておさらいしておきます。
selfというのは自インスタンスを指しています。VBのmeに似ているかも知れません。
また、navigationItemというのは予め自動生成されている画面上部のナビゲーションバーそのもののインスタンス名です。
NSLocalizedStringという関数(?)は、複数言語対応する際に活用できるものと推測しています。そのため、常に"Add"でいいという場合には、
initWithTitle:@"Add"
と書くことも可能です。@"文字列"というのが、Objective-Cにおける文字列の指定方法であることも見て取れます。
また、一つのコードの最後にはC言語特有の「;」セミコロンを付ける必要があります。その代わりに、セミコロンに至るまでは何度改行しても構いません。
[UIBarButtonItem alloc]に注目してみます。Objective-Cでは、他のインスタンス、クラスに対するメソッドの実行は大カギ括弧[]を使って表現されます。この場合、UIBarButtonItemというクラスに対して、allocメソッドを実行しなさいという意味になります。
実は、allocメソッド(クラスメソッド)が実行されると、戻り値は(ID)型の生成ほやほやのインスタンスになります。ここでインスタンス化されたオブジェクトは、
UIBarButtonItem *addButton=
という形でaddButtonなるUIBarButtonItem型のポインタ変数に代入されています。*印から始まる変数はC言語でお馴染みのポインタをやはり意味していますが、一般的にプログラミングしている限りはあまり気にしなくても問題ないはずですので、ポインタに対する嫌悪感を覚える必要はまだありません。
target:self
などといったプロパティ(引数)の渡し方はVBやVBScriptでお馴染みなので抵抗のない型も多いと思います。
action:@selector(addAction:)
このキーワードは大変重要です。
"Add"という名前のボタンがタッチされた際に呼び出されるメソッドが"addAction:"であることを意味しており、当然そのようなメソッドは実在していないのでこの後、具体的に実装していくことになります。
self.navigationItem.rightBarButtonItem = addButton;
という最後のコードで、navigationItemオブジェクトの右ボタンにポインタ変数addButtonを代入する形で実装を完了しています。

シミュレーターで実行すると、実際に結果に反映されていることが分かります。
Editボタンはタッチ(シミュレーター上ではクリック)すると実際に効果を確認できますが、Addボタンは実装がまだされていませんのでエラーとなります。
  タッチイベントのハンドラーを実装する
Addボタンをクリックしたら、メッセージを表示する機能を実装してみます。最終的には別のビューにスライドする効果を実装しますが、その前段実験といえます。
{
// the add button was clicked, handle it here
// Alert
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Alert", @"")
message:@"abc."
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
上記のように適当な場所……自分で見やすい場所に新たに
- (void)addAction:(id)sender
  {
  }
というキーワードをコーディングします。このaddAction:というメソッド名は、前述でAddボタンを追加したときのActionプロパティに指定したメソッド名です。
  メソッドの引数としては(id)型の送信者となるオブジェクトが渡され、メソッドの中ではsenderという変数名で利用できることが意味されています。
中括弧の中はアラートを表示するメソッドが書かれています。
UIAlertView alloc
で、UIAlertView型のインスタンスをallocメソッドで作成し、その戻り値であるインスタンスそのもののinitWithTitleメソッドを入れ子にして呼び出しています。
  一般的にObjective-Cではこのように、インスタンスかと同時にinit〜メソッドを呼び出すのが通例となっています。
インスタンス化して初期化されたこのオブジェクトは、
UIAlertView *alert
に代入されています。UIAlertView型のポインタ変数alertに代入されています。
    [alert show];
[alert release];
  という2行で、alertのshowメソッドを呼び出し実際にメッセージを画面に表示、alertのreleaseメソッドを呼び出してalert変数を解放するという仕組みになっています。
ここでは(今後しばらく)あまり気にしないことにしますが、このようにC言語特有の「メモリ管理を開発者が行う」という旧世代的なメモリ管理方式がとられることが今も通例のようです。
  ただ、新しいSDKではガーベージコレクション機能を選択することも出来るので、Javaなどのようにメモリ管理をせずにコーディングを進めることも出来ます。ただ、現存する殆どのサンプルが開発者によるメモリ管理を前提としたコードとなっているため、今後も甘んじてこの苦行に挑むこととします(実際に挑むのは出来るだけ後回しにします)。
今度は、RootViewController.h を編集します。
    RootViewController.hには、このクラスの設計情報を記述することになります。先に実装を行いましたが、同時に設計情報の編集も必要となります。 
@interface RootViewController : UITableViewController {
    
    }
// add button action method
    - (void)addAction:(id)sender;
上記のように、addAction:というメソッドを新たに追加していることを@interface * {}の後に記述します。{}の中にはインスタンスプロパティ(変数)の定義を記述し、その後にはインスタンスメソッドを記述するように決められています。
これで、Addボタンをクリックした際にポップアップメッセージが表示されるようになりました。

このウィンドウはいわゆるモーダレスで、OKをタッチする前にプログラムの実行は止まらずに先のステップへと進みます。
- iPhone全般、一般
 - iPhone OS 3.0ベータ版のレビュー
 - iPhone OS 4.0ベータ版のレビュー
 - iPhone SDKの開発環境、XCodeの基本
 - iPhoneチュートリアル
 - XCodeの便利なショートカット
 - iPhone技術情報、開発テクニック
 - iPhoneのSQLite3周りのテクニック
 - iPhone SDKのトラブルシューティング
 - iPhone SDKでGoogle Apps APIを利用する
 - iPhone SDKを使ったデバッグ手法
 - お勧めリンク
 - ダウンロード
 - ストリーミング関連
 - Macintosh関連
 - 
          
- Macでも使えるDVDドライブ
 - Leopard詳解
 - iLife詳解
 - Macの修復方法特集
 - Apple MacBook (Pro)
 - Macで無線LAN802.11n
 - 新旧MacBookベンチマーク
 - フルHD編集Apple iMovie&Final Cut Express
 - ROXIO Toast Platinum
 - フルHD編集Apple Final Cut X
 - MacBookのHDD換装方法
 - MacとWindowsのファイル共有
 - MacでWindowsを遠隔操作
 - WinユーザーのためのMac概論
 - 無料の辞書検索ツール 英辞郎
 - 代表的なタブブラウザの比較
 - Macお勧めのフリーソフト紹介
 - 無料のOffice環境 NeoOffice
 - エミュレータ比較
 - Macで最適バックアップ
 - iGeek Indelible
 - intego PersonalBackup
 - EMC® Retrospect® for Mac
 - Mac版 ウイルス対策
 - Ruby On Rails インストール(Mac編)
 - Ruby On Rails 開発の初歩(Model)
 - Ruby On Rails 開発環境RadRails
 - Ruby On Rails DBメンテナンス
 - Excel, Wordを使ってMacで年賀状宛名印刷
 
 - Windows関連
 - 
          
- EaseUS Todo Backupで完璧バックアップ
 - DVD, Blu-rayリッピングツール AnyDVD HD
 - キャプチャーソフト hunuaaCap
 - Windows2003でリモートデスクトップ7を動かす
 - 最適なバックアップソフトは
 - robocopyによるバックアップ
 - リージョンフリー
 - リージョンフリー化を有効活用
 - マルチブート
 - Antivir®
 - eTrust Antivirus
 - AVG AntiVirus
 - C#徹底講座
 - メーラー Mailer
 - VBA徹底活用術
 - JustSystemメーラーShuriken
 - FTPソフトとコマンドライン解説
 - DOS/Vパーツリンク集
 - Oracle10gBronze試験対策
 - CDからMP3へ簡単に変換する方法
 
 - メディアなど
 - ハードウェア
 - 
          
- iPhone 3G
 - iPhone 4
 - iPod+iTunes
 - iPhone SDK
 - 色域(AdobeRGB)
 - hp mini 1000
 - 環境紹介
 - KDDI au新旧プラン研究
 - DVDをMP4にコンバート
 - 無線LAN環境802.11n
 - キャプチャボード
 - HD-LANによるネットワークストレージ構築
 - NEC LavieJ LJ500/5A
 - LavieJ HDD換装
 - LavieJ 調子の悪いHDDの復旧
 - LavieJ 無線LANモジュールの換装
 - LavieJ メモリの追加
 - LavieJ バックアップ作成と復元
 - Intel PRO/Wireless 2200BG
 - 液晶・プラズマテレビ比較
 - プリンタ(hp PSC2550)
 - 万能リモコン クロッサム
 - 婦人体温計 プチソフィア
 - 婦人体温計 マドンナ
 
 - ソフトウェア/サービス/開発SDK
 - デジタル一眼レフカメラ
 - テクニカル記事
 - 趣味関連
 - ゲーム 〜楽しいゲームの紹介や攻略法
 - RoverMNI(ローバーミニ)
 - 雑記
 - その他
 - 
          
- ネットバンキングに便利な金融機関
 - 便利なサイト翻訳機能
 - 便利ツール GMail
 - 無料電話Gizmoの嘘とほんと
 - リンク:一般ページへのリンク集
 - 相互リンク:相互リンク募集中!
 - 本ページの統計:本サイトの統計データ公開
 
 - コメント・フィードバック