2009年05月06日

アプリ開発雑記[3] - NavigationController + TabBar

サンプルコードを漁ってるうちになんとかTableViewやNavigationControllerにどんなメソッドが必要か、どういうカスタマイズが可能か理解できるようになった(つもりな)ので、今日から、適当にサンプルコードを組み合わせて、作りたいアプリの骨組みを作ることにしました。イメージは4つのタブがあるTabBarを持っていて、2つのタブがユーザーがアクションを起こす機能を実装したもの、2つがアクションから得られたデータの管理画面という構成です。各タブに実装したい機能を学びながら少しずつ開発して行こうという(安易な)作戦です。

意気揚々と臨んでみましたが、あっさり壁にぶつかりました。

TabBarの魅力って、各タブにNavigationControllerを入れ子にしたりできることだと、木下誠さんもiPhone SDK プログラミング大全のp171で
おっしゃってるので、そりゃ便利だと思って試したんですが、これがどうも結構難しいみたいですね。InterfaceBuilderでどうあがいても、いざ起動してみるとタブの中にNavigationバーが出てこない。真っ白い画面のままです。

とりあえず白旗を揚げて、Googleさんに聞いてみたら、どうやらTabBar+NavigationControllerはxibを使って実現できないみたいなんですね。

こんな記事がありました。
xibを使わずに、"programatically"にやってくださいと"DevTeamOfOne"さんが回答されてます。(このかたはAppleのかたでしょうか。。。)実は、TabBarを扱っているTheElementsというサンプルコードを見ていたのですが、xibがないことには気づいていて、なぜにベタにコード書いてるんだろうなーぐらいの認識だったのです。その実、こういう理由だったんですね。上記URLには親切にサンプルコードまで載せてあるので、後ほど試してみようと思います。

というわけで、結果はまだ分かりませんがとりあえずメモしておきます。
タグ:iPhone SDK
拍手する
posted by macj at 22:49 | Comment(0) | TrackBack(0) | iPhoneアプリ開発 | このブログの読者になる | 更新情報をチェックする

2009年05月03日

アプリ開発雑記[2]

GWのおかげでたっぷり時間が取れてます。いまのうちにちょっとしたアイデアをメモ的にコーディングできるくらいにはなっておきたいところ。

今日は昨日頭を悩ましていたデレゲートとプロトコルについて整理がついてきました。プロトコルは従うって言うよりは、実装するという感じでしょうか。JavaでいうInterface相当のものらしいです。なにぶんJavaを知らないのでどういうものかはわかりませんが、今日わたしが至った解釈だとInterfaceという言葉の方がイメージに合いそうです。例えば、UIApplicationDelegateに準拠させると、「このクラスはUIApplicationDelegateで規定されているインターフェイスを実装しますよ」という意味合いの模様。ほかにもUIWebViewDelegate、UIImagePickerControllerDelegate、ABPeopePickerNavigationControllerDelegateなどがあけれども、それらに”準拠する”とは、それぞれに従ったインターフェイス(あえてカタカナ)を実装するという意味なわけです。

さて、ここまでの時点でプロトコルについて書いたのに、やたらに目につくのが"Delegate"(デレゲート)という文字列。"〜〜Delegate"というプロトコルがたくさんあるようです。それらに準拠する(それらに従ったインターフェイスを実装する)ということはどういうことか。"Delegate"=”(権限など)を移譲する”という単語の意味と併せて考えて、今日わたしが至った解釈は「ある機能(WebViewだったり、AddressBook、Accelerometer)にアクセスする権限をクラスに移譲してあげるから、そのかわりにクラスをプロトコルに従わせなさい。」という解釈です。クラスの宣言で

@interface AppDelegate : NSObject <UIApplicationDelegate>
{

}

@end

 


みたいにして"<>"でDelegateプロトコルに準拠しているのは、ある機能を使う資格を与えてるということですね。

ただ実際のところ、従うと言っても必ず実装しなければならないインターフェイス(required)は少ない(ほとんどoptional)ようで、むしろ、"〜〜Delegate"プロトコルに従うことで実装できるようになる(アクセスできるようになる)機能が増えるみたいです。例えば、プロジェクトを新規作成するとできるxxxxAppDelegate.hはデフォルトでApplicationDelegateに従っていますが、これに従うことでアプリケーションの起動時の動作をapplicationDidFinishLaunchingメソッドに実装したりできる。ほかにもAudioだとか加速度センサーだとか、それぞれを扱う時にDelegateとする(Delegateプロトコルに従う)とことでエラー処理や起動/終了時の処理が扱えるようになるようです。

ずいぶんすっきりしました。
まだ間違っている部分もあるかもしれませんが、大きな進歩な気がします。

TableViewに挑戦だー。

拍手する
posted by macj at 22:30 | Comment(0) | TrackBack(0) | iPhoneアプリ開発 | このブログの読者になる | 更新情報をチェックする

2009年05月02日

アプリ開発雑記[1]

iPhone Developer Program に入って、1週間弱がたちました。平日はほとんど何もやれてないのが実情ですが、少しずつ進めています。ブログの趣旨がぼやけまくりですが、今までのようなコンテンツと併せて、今後プログラミングをやって行く過程をブログに書き溜めて行こうと思います。

今回はここまでの歩みをまとめておきます。少し長いです。。。

(1)プログラミング経験値

ブログやTwitterでコミュニケーションとりやすくなることを願い、わたしのプログラミング経験をさらしておきます。

  • 大学でPascalという学習者向けのプログラミング言語に触れる。
  • プログラムおもしれーと想い、いきなりWindowsでVisualC++に挑戦。Hello Worldをダイアログに表示することさえ全く訳が分からず玉砕。
  • 何かソフトを作ってみたいという想いがあったが、VisualC++のトラウマから「おれには無理だ」と諦めて過ごす日々。
  • その後、VisualBasicを触ったところ、VisualC++に比べて驚異的に簡単だったので、「なんかできそうだー」とトラウマから解放されるが、飽きっぽい性格からアプリケーションらしいものを作るに至らないままポイ。
  • また、大学の授業でその後ネットワークプログラミング(C言語;ソケット使って、POP/SMTPくらいだったか。)と組み込み系のプログラム(あるアセンブリとC言語)をかじる。かなり面白かったが、その時に軽々と課題をこなすスーパーマン集団を見て「あいつらみたいにはなれねーな」と熱が冷める。
  • その後は、たまにプログラミングというものへの憧れが季節が巡る度に虫のように湧いてきて、C++、Perl、Rubyといろいろかじってはさよならを繰り返す。
  • 結局は研究や仕事で便利なテキスト処理をPerl(100行以内)で作る、という程度のプログラミングスキルのみが身に付いて現在に至る。

こう振り返ると、このCocoa/Objective-Cプログラミングも「季節もの」で終わる可能性が大です。ただし、実機が持つマイク、スピーカー、タッチパネル、GPS、加速度センサーといったインターフェイスを動かすことの面白さと、もしかすると世界中にアプリが配布できて一攫千金も夢じゃないという人参があるので、なんだか行けそうな気がしている今日この頃。

(2)Cocoa/Objective-C経験値

  • everybodyキャンペーンでiPhoneを買う1ヶ月くらい前に、iPhoneSDKプログラミング大全を買う。あの"Singing Cat"のfrnkさんが話題になったことがきっかけ。
  • ぼちぼち読みすすめていたが、iPhoneを買ってから2ヶ月弱、iPhoneを使うことに夢中で放置状態。
  • iPhoneを触ることに慣れ、またそのデバイスの面白さに触れる。なにか作ってみたいと改めて思い立つ。
  • 「たのしいCocoaプログラミング」を買い、半分くらい読む。
  • 「実機を動かした方が面白い」という考えから、iPhone Developer Programにお布施。


C++やRubyをかじっていたことから、オブジェクト指向のクラス、メソッド、インスタンスあたりの概念に抵抗はなかったです。また、「たのしいCocoa」はC++との比較があり、Objective-Cの理解の助けになっています。

(3)現在の課題

今のところ、作りたいものは決まっていて、必要なスキルを作りながら身に付けているという状況です。楽しいですが、道は長く険しそうな予感がしてます。現状直面している課題は以下のようなもの。頭がモヤッとしてます。

  • デレゲートの概念
  • MVCアーキテクチャでM(モデル)をどう作るのか
  • protocol

デレゲートがさっぱり頭に入ってきません。Window-Based Applicationプロジェクトを新規で作ると、hogehogeAppDelegate.h/.mというソースコードができます。チュートリアルではここにガシガシとMVCのC(コントローラ)にあたるものを書くものをよく目にしますが、Delegate=Controllerではないですよねー。すみません、自分で書いてて支離滅裂です。

上の話にも絡みますが、MVCのMは理想的には独立したクラスとして作るべきなんですよね?きっと。チュートリアルでは規模が小さいからか、hogehogeAppDelegate.mに直接書いてるものしか目にしません。本格的かつ実用的なアプリケーションを開発している方はどういう作り方をしてるんでしょうか。・・・支離滅裂ですか(汗)

protocolは従うべき決まり事を規定したものだと理解していますが、従わなければならない場合、あるいは、従ったほうが便利な場合ってなんなのでしょうか。そもそもなにが規定してあるのかチンプンカンプン。実は、試しに作ったプログラムで「xxx.hはyyyプロトコルに従ってない」というWarningが出たところ、そのまま従わせたらWarningが消えて根本原因がさっぱりわからなかったというのが疑問の発端。

(2009/5/3追記)プロトコルとデレゲート、少し理解が進みました。
これから始める初学者の方は上記のことは忘れてください!
http://road2iphone.seesaa.net/article/118577716.html


(4)今後

今後はこういった感じで、つらつら書き留めて行こうと思います。解決したらそれも書き残して行きます。これから試して行きたいのは、TableView、SQLiteあたりです。データベースなんて扱ったことないですが。。。

今日はこんな所です。
先は長そうだー。

タグ:iPhone SDK 開発
拍手する
posted by macj at 17:54 | Comment(0) | TrackBack(0) | iPhoneアプリ開発 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は90日以上新しい記事の投稿がないブログに表示されております。