iOS」カテゴリーアーカイブ

アプリ開発雑記[12] サンプルコードが大量にupdate for OS3.0

最近、OS3.0対応状況がアプリによってまちまち過ぎて、しばらく落ち着くまで新しいアプリに手を出そうという気がなかなか起こりません。あの脳トレを最後に無料アプリすらダウンロードしてない状況。うーん、これはアプリ開発を進めなさいというおぼしめし(誰の?)に違いありません。

というわけで、最近は平日皆無、土日もどちらかに1時間程度しかやっていなかったアプリ開発に少し精を出してみることにしました。

今日は、サンプルコード集を久々にのぞいてみました。すると・・・

"Minor change iPhone OS 3.0"とか、"Content update iPhone OS 3.0"とかOS3.0がらみのアップデートが大量に出てました。5月の終わりぐらい始まって先週くらいまでに多くのサンプルコードにupdateが入っていました。ずいぶん覗いてなかったな。今までサンプルコードをベースにちょこちょこと作りたいもの近づけるという方針で作業をして来たのでちょいと面食らい気味です。

で、気を取り直して。

今考えてることをメモして明日から?頑張ろうと思います。

方針:「Tab Barをやめてシンプルにいこう」

TabBarでファンクションを切り替えるようにしようと思っていましたが、ユーザーにとって最初に何をすべきかが分かり辛くなりそうだったので、ToolBarを使用することを考え中です。サンプルコードとしては「UICatalog」が参考になると思われ。UICatalogはOS3.0がらみのアップデートで大きく変わっています。xibが各種UI毎に分割されていて自アプリへの活用がより容易になっています。以前同サンプルを見た時はxibじゃなくてべたにコードが書いてあって気が遠くなった覚えがありましたが、このupdateで新しく開発にチャレンジする方にもわかりやすくなったんじゃないでしょうか。(初心者のくせに偉そうですみません)

ますますアプリ開発は、ライブラリの部品をがちゃがちゃ組み合わせて、ほい!

アプリ開発雑記[11]:新しいiPhone App向け広告で0.5円/インプレッション

アプリ開発がすっかり止まってるのですが、興味深いサービスを見つけたので一つご紹介いたします。

「0.5円/インプレッションのiPhone App向け広告」!
http://iphone.trafficgate.net/site_tour3.html

インプレッションというのは、広告の表示のことをさす言葉だそうです。つまり、アプリを起動さえしてもらえれば、広告収入が得られるという訳です。Google Adsenseのようにクリックをしてもらう必要もなく、他のアフィリエイトのように商品を購入してもらう必要もない。

アプリ開発者の方々には、一攫千金は無理でも小遣いくらい稼ごうとお考えの方は多いはず。わたしもそんな夢見る一人・・・。しかしながら、実は今まで広告が表示されるiPhoneアプリを使っていて、クリックしたことは一度もないので、無料アプリ公開しても広告で収入を得るのは無理だなーと思ってました。ちょっと興味深いですね。毎日継続して起動してもらえるようなアプリを作るといいんじゃないでしょうか。体重管理アプリとか、TODO管理とか(すでにあるのでもちろんやりませんが)。

アプリ開発雑記[10]

2週間ぶりのアプリ開発雑記です。開発作業もこの日曜日に2週間ぶりにやりました。
まずは前回のエントリで挙げた今後の課題を再掲します。新しい課題も追加しました。

  1. SQLite(データベースの作成、データの登録・抽出)
  2. 画面の切り替えをかっこよく
  3. マルチタッチの使い方
  4. TabBarでタブを選んだ時にタブバーを表示させない。
  5. テーブルのソート
  6. 列を複数持つテーブルを作る
今回は、5と6をやっつけました。


<テーブルのソートが解決>

ソートがなんともあっさり解決しました。NSDictonaryとか小難しいこと言っていましたが、SQLiteでデータを読み出す時にQueryでソートしてしまえば何の苦労もなかったです。サンプルコードのSQLitebooksで言えば、


const char *sql = "SELECT title FROM book WHERE pk=?";
const char *sql = "SELECT title FROM book WHERE pk=?
ORDER BY title";

とします。ちなみに、新しいデータを追加した場合はソートされたデータの最後尾に新しいデータが追加されます。サンプルコードでは起動時に一度データを抽出してテーブルを作っていて、あとの処理では並びかえをしていないためです。追加後も並び替えたいという場合は、テーブルのデータソースとなっている配列を破棄してもう一度新しいQueryで読み出し直すか、上記のNSDictionaryが必要ということになります。

今のところは目標が最低限達成されたので次の課題に移ることにしました。


<列を複数持つテーブルを作る>

SQLitebooksをベースに作ったオリジナルDBを使ったプログラムで、SQLitebooksのように1行にひとつの情報だけでなく、1行に複数の列を持たせて多くの情報を表示させるように改変しました。参考にしたサンプルコードは、「TableViewCellSubviews」です。

1行の場合は、cellForRowIndexPath内でUITableViewCellを生成して、そのセルに、

cell.text = book.title;

のようにcell内に表示するテキストを指定していました。複数の列を持たせる場合は、ここで行の中の子セルを作って挙げる処理を記述します。サンプルコード「TableViewCellSubviews」では、tableviewCellWithReuseIdentifierというメソッドを定義してそれを呼び出す格好で、子セルを生成しています。ここの記述はdefineマクロを使って、サイズを制御しています。お絵描きしているだけなので難しい記述ではありません。子セルはUILableやUIImageViewの箱を載せることで実現し、defineマクロで定義されたTAGを各箱に与えて(TIME_TAGなど)、各箱の中身へアクセスします。こんな感じ。

label = (UILabel *)[cell viewWithTag:DATE_TAG];

label.text = [dateFormatter stringFromDate:training.date];

cell.text = book.title の部分がcell内の各箱(LabelやImageView)になるわけです。サンプルコード「TableViewCellSubviews」では、別メソッドconfigureCellにこの処理を定義しています。

さて、SQLitebooksを改造したプログラムに、これらの処理を書き加えることで1行を2列にしてみましたが、実は最初はうまくいきませんでした。作った箱に表示したいデータが反映されていないんです。そして、その行を選択してDetailViewを表示させると中身はちゃんとある。さらには、DetailViewからMasterViewControllerのビュー(一覧)に戻ってくると、さっきまで表示されていなかったデータがちゃんと入っている。そんなバグを埋め込んでしまいました。

その原因は、SQLitebooksの起動時の処理にありました。

実はSQLitebooksの起動時のqueryでは、表示させる必要最低限のデータ、すなわち、"title"しか読み込んでないのでした。なので、箱を作っても入れるデータを読み込んでいないので、表示されないのは当たり前でした。行が選択されDetailViewを表示するときになって、残りの情報(copyright, author)を読み出すという方法をとられています。こうすることで、起動時に余計な処理をしないようにしているんですね。それはそれで勉強になりました。


<今後の課題>


芋づる式にいろいろ課題が出てきます。たまる一方。

  1. SQLite(データベースの作成、データの登録・抽出)
  2. 画面の切り替えをかっこよく
  3. マルチタッチの使い方
  4. TabBarでタブを選んだ時にタブバーを表示させない。
  5. テーブルのソート
  6. 列を複数持つテーブルを作る
  7. ダイアログ表示
  8. 起動時のSplash画面表示

まもなく、iPhone3.0へのバージョンアップが来ると予想されていますね。
当初は3.0公開前にひとつアプリ出してやるぜーと思ってましたけど、このペースでは全然無理でしたー(’д`;)ノもっとがんばらなきゃ。

アプリ開発雑記[9]

今週はダウンしてたのと、良質なゲームアプリStoneLoopsにはまったのとで、あんまりアプリ開発のお勉強は進んでいませんが、週に一度くらいは現状と今後の課題をまとめて置きたいと思います。

前回記事アプリ開発雑記[8]で挙げていた課題のうち、

  1. SQLite(データベースの作成、データの登録・抽出)
  2. 画面の切り替えをかっこよく
  3. マルチタッチの使い方
  4. TabBarでタブを選んだ時にタブバーを表示させない。
SQLiteはサンプルコードをベースになんとか操れるようになりました。Google CodeにあるようなObjective-C用のSQLite access libraryは使用しませんでした、逆に敷居高そうで。サンプルコードの解読には、SQLite本家サイトのFuction Listが一番役に立ちました。

http://www.sqlite.org/c3ref/funclist.html

sqlite3_prepareでqueryを作って、queryの"?"の数だけsqlite3_bindで引数を与えて、sqlite3_stepで実行という流れでした。以下のリンク先で検討されているような高速化云々は今のところノータッチです。

というわけで、SQLiteを操ってテーブルへのデータの追加ができるようになったのですが、ここで新しい課題が発生。テーブルのソートです。サンプルコードの"TheElement"を見る限りではNSDisctionaryとNSSortDescriptorが鍵のようです。まだアプリ完成への道は遠いな(;’д`)

今後の課題を再掲。

  1. SQLite(データベースの作成、データの登録・抽出)
  2. 画面の切り替えをかっこよく
  3. マルチタッチの使い方
  4. TabBarでタブを選んだ時にタブバーを表示させない。
  5. テーブルのソート
たまに他のアプリを触ってUIを参考にしながら、あるいはゲームで息抜きしながら、ぼちぼち進めます。

アプリ開発雑記[8]

平日はあんまり進められませんでした。今抱えている課題は以下のようなもの。

  1. SQLite(データベースの作成、データの登録・抽出)
  2. 画面の切り替えをかっこよく
  3. マルチタッチの扱い方
  4. TabBarでタブを選んだ時にタブバーを表示させない。("TheElement"で実現されている)

ここ最近やったこと。

  1. moto_makaさんのチュートリアルを参考に、タイマーと画像表示をお試し。
  2. SQLiteの参考サイト集め
    • ゲームつくろー>SQLite超入門
      • http://marupeke296.com/SQLITE_main.html
    • MASATOの開発日記>SQLite性能評価
      • http://www.sutosoft.com/room/archives/000454.html
    • Google Code > pldatabase (SQLite access library for Objective-C)
      • http://code.google.com/p/pldatabase/
    • iPhoneディベロッパーのためのSQLite12の情報源
      • http://blog.sohaya.com/2008/11/13/iphoneデベロッパーのための12のsqlite情報源/
ようは全然進んでないということです(汗)
がんばりまする。