だいたい47度

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

iOSデータベース周りの本を読んでみた(1) Professional iPhone and iPad Database Application Programming

せっかくだからゲーム以外のアプリも作ってみようと思いましたが、その場合、コンテンツに魅力がないと面白くなさそうです。基本的な動きはゲームよりも簡単ですし。

そのためデータベース連携周りを学習することにしました。この本がよさげ。例えば、取得したデータ量が多すぎて画像描画が遅くなった時対応、などのTipsも豊富そうです。400ページ弱。
Professional iPhone and iPad Database Application Programming (Wrox Professional Guides)Professional iPhone and iPad Database Application Programming (Wrox Professional Guides)
(2010/10/26)
Patrick Alessi

Objective-Cの文法は分かっている人向けの本です。大きく3パート構成で、パート1ではデータを使ったアプリの作成方法、パート2ではCoreDataの使い方、パート3ではWebサービスとの連携をやるようです。ちょっと古いのでARCなどには対応しておらず、そこはこっちで補完して読む必要があります。

Chapter 1:Introducing data-driven applications
第1章では、単純なアプリを作ります。XcodeやMVC(Model-View-Controller)の説明の後に開発開始。NSStringのNSArrayを持つModelクラス(NSObjectの子クラス)を作成し、それを使ってUITableViewを描画します。UITableViewDelegateの話をしておしまい。意外とHello World的なこともやるんだな。

Chapter 2:The iPhone and iPad database: SQLite
第2章では、オープンソースライブラリSQLiteを使います。SQLiteは、アプリ組み込み型のリレーショナルデータベース管理システムです。データを1つのファイルに保存し、それにSQL文でアクセスしますので、軽量なデータであればMySQLなどより使い勝手がよいです。sqlite3 hogehoge.dbコマンド1つでデータベースを作れて、あとは普通にクエリを実行できるのですね。GUIもあるし、敷居は低そう。

データベースへの接続は専用クラスを作ります。.dbファイルをアプリ内に入れておいて、それにアクセスします。クエリの実行は、プリペアードステートメントを作成し、その結果をstepで一行ずつ読み込むことで行います。プリペアードステートメントで引数的に扱う部分は?にしておいて実行時に変更することができます。データの読み出し関数はsqlite3_column_textなど色々種類があります。一覧が本にもありますが本家を見てみてもいいかも。

//DBAccess.m
sprite3 *database;

- (void)initializeDB
{
 NSString *path = [[NSBundle mainBundle] pathForResource:@"database" ofType:@"db"];
 if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
 } else {
  sqlite3_close(database);
  //エラー処理
 }
}

- (NSMutableArray *)someQuery
{
 NSMutableArray *ret = [[NSMutableArray alloc] init];
 const char *sql = "SELECT hogehoge....";
 sqlite3_stmt *statement;
 //プリペアードステートメント
 int sqlResult = sqlite3_prepare_v2(database, sql, -1, &statement, NULL);
 if (sqlResult == SQLITE_OK) {
  while (sqlite3_step(statement) == SQLITE_ROW) {
   //statementからデータを取り出して、Modelクラスに格納
   //ModelクラスをretにaddObject
  }
  sqlite3_finalize(statement); //リソースのrelease
 }
 return ret;
}

結構単純でいいですね。使ってみよう。

Chapter 3: Displaying your data: the UITableView
第3章では、UITableViewについて掘り下げます。UITableViewおよび関連クラスは、DBから取得したデータを一覧で表示するのによく使うのでよいですね。

まずUITableViewをカスタマイズしていきます。subviewなどを持たせてリッチなtableにしていきます。途中でdequeueの説明などが入りますが、恥ずかしながらよく分かっていなかったので学習できてよかったです。Stringで指定するIdentifierはcellのstyleを指定してcellを再利用しているものなのですね。普通のscrollviewとは違いますね。

複数のsubviewをCellに持たせると、パフォーマンスに影響が出ます。これに対応する方法としてdrawRect:をオーバーライドする方法を説明しています。なお、カスタムにdrawRectする場合セル内のアニメーションは非推奨なので、ユーザが編集できるCellにはこの方法は使えません。また、一度にdrawRectしたものは同一とみなされるため、その中に複数のボタンを含めることはできません。他にパフォーマンスを上げる方法として、Cellが透過しないようにする(opaque = YES)のは基本みたいですね。opaqueがNOになっているものはInstrumentsのCoreAnimation、Color Blended Layersで確認できます。

//ViewCell.m
- (void)drawRect:(CGRect)rect
{
 //文字列
 [string drawAtPoint:CGPointMake(0,0)
  forWIdth:120
  withFont:[UIFont systemFontOfSize:18]
  minFontSize:12
  actualFontSize:NULL
  lineBreakModel:UILineBreakModeTailTruncation
  baselineAdjustment:UIBaselineAdjustmentAlignBaselines];

 //画像
 [image drawInRect:CGRectMake(0,0,0,0)];
}

Indexについても説明があります。アドレス帳の右のアルファベットのようなもの。ここって開発者が決めれるんですね、へー。更にsearch barを付ける方法も詳細に書いています。

Chapter 4: iPad interface elements
第4章では、iPadに視点を移します。前半はUISplitViewControllerとUIPopoverControllerを説明しながらサンプルアプリを作っていきます。目新しいところはなし。UIPopoverControllerを使ったことなかったので、ViewControllerを引数に渡してinitするのが新鮮でした。

中盤はGesture Recognizerの話。対応するUIGestureRecognizerの子クラスをviewにaddしてあげることで、swipeやpinch動作を簡単に認識してくれるクラスです。以前ゲームを作ったときはこれがなくて一つ一つ書くのが面倒だった……。しかしこれiPadの章にあるべきなのか?

//ViewController
- (void)viewDidLoad
{
 [super viewDidLoad];
 UISwipeGestureRecognizer *swipeLeft = [UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeToLeft:)];
 swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
 [self.view addGestureRecognizer:swipeLeft];
}

- (void)swipeToLeft:(UIGestureRecognizer *)sender
{
}

最後にiTunesを介したPCとのファイルシェアリングの話。plistでApplication supports iTunnes file sharingを設定した後、アプリの中でデータをXML化させて保存させています。個人的にあまり興味がないので読み飛ばし。


長くなってきたので一旦ここで切ります。ちょうどPart1の終わりだし。次はとうとうCoreDataに入るようです。
関連記事
スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。