For Want Of A Better Word

【iOS7+Xcode5】FMDBサンプルアプリの構造確認①

      2015/04/18

DBの使い方を確認して、最終的には下記サイトを参考に作ったメモアプリを修正する形で実現したい。
iPhone用メモ帳アプリをつくる | プログラミング講座 JProgramer

※キーボードまわりを回収済み(入力後隠れる・入力時フィールドを上にずらす)
しかし、どういう風なプログラムの作りにするか、ちょっと指針が無い。

そこで修正の前に下記のサンプルソースを見て、DBのメソッドをどこに実装して、
どうやって使っているのかを確認し、実装の参考にする
iOS で SQLite – FMDB の使い方 | アカベコマイリ

ソース確認

ファイルはストーリーボード無しで下記のような構成
===============================
プロジェクト
– Libraries
– Supporting Files
– AppDelegate
– Views&Controllers
– Books (一覧画面)
– BooksEdit (編集画面)
– Models
– Book
– DaoBooks
===============================

ModelがDBまわりと思われる。

Models>Bookはエンティティクラス。このクラスのインスタンス一つが1レコードになる感じ。javaい。
ヘッダでDB項目を定義。モデルでは「@synthesize」でgetter,setterを確保して
メソッドはメモリ解放だけ。

Models>DaoBooksは

ヘッダファイルで

という風に定義

※(補足) @クラスについては下記
Objective-Cと戦うブログ: #importと@classの使い方について

…まだちょっとよく分からないです。

で実装ファイルを見ると

FMDBのヘッダをインポート、
エンティティクラスのヘッダをインポート(@classとした場合はこうする必要があるらしい)。

んでDB扱う上で特徴的なのが下記か

「CREATE TABLE」の「IF NOT EXISTS books 」で、テーブルが無い場合だけ作成することが出来る。

DB操作用のSQLを定数として先にかいてしまう。?はプレイスホルダ―で、値はメソッドの中で下記のように渡している。

ちなみにopenやcloseも各メソッドの中で実施。

コネクション取得用のメソッドを作って..

各メソッドで呼び出し

※補足()定数のメッセージ先がDaoBooksだったり、メソッドのメッセージ先がselfだったりの、クラス名部分が分からんね。。

更新系SQLの実行後は、実行処理の戻り値がtrueかfalseかで成否を判断という感じ。

これが大体のDaoクラスの構造。
うん、わかりやすくていいね。いいね。

まとめ

Daoクラスの作りについてまとめると

・エンティティクラスを用意。(ヘッドで扱うDB項目に対応する変数を宣言する。)
・Daoクラスを用意。@classでエンティティと同じクラス名にする。(mファイルで、エンティティのhを#import)
・Daoクラスでは発行するSQLを#defineで定義。値部分はプレイスホルダ(「?」)で置き換え
・コネクション取得用のメソッドを定義
・各目的・CRUD用のメソッドを記述。(TableのCreateも作らないとアカンのに注意。)

こんな感じ。

次はこれらをどういう感じで呼び出しているのかを確認。


【iOS7+Xcode5】FMDBサンプルアプリの構造確認② – For Want Of A Better Word

 - ios, objective-c, xcode

  関連記事

objective-c
IBoutletとIBaction、その違い

埋もれていたので抽出 IBOutletとは、パーツ自体をプログラムで定義した変数 …

objective-c
【iOS7+Xcode5】FMDBサンプルアプリの構造確認②

前回の続き 【iOS7+Xcode5】FMDBサンプルアプリの構造確認① &#8 …

objective-c
【Objective-Cが襲いかかってきた】IOS7+Xcode開発_TODOアプリ_作成メモ(1) プラスボタンのコード

よっしゃいくぜTODOアプリ(Xcode4.5向けだけど、5でやるぜ。なんとかな …

objective-c
【Objective-C】ファイル構成-実行の流れ

参考:http://yksmtmks.blogspot.com/2011/02/ …

no image
コマンドラインでのスペース含むディレクトリへの移動

まあmacだったんですが。 Application Support というディレ …