FMDB の kvcMagicメソッド
FMDBを使ってSQLiteをさわろうと思って色々と調べてたら次のメソッドを発見。
kvcMagic!!!
なんとも怪しげな名前ではないですか。
実はこのメソッド、 Cocoa の Key-Value Coding を利用して
SQL実行結果を、引数で渡したオブジェクトに突っ込んでくれるのです。
- (void)kvcMagic:(id)object { int columnCount = sqlite3_column_count([_statement statement]); int columnIdx = 0; for (columnIdx = 0; columnIdx < columnCount; columnIdx++) { const char *c = (const char *)sqlite3_column_text([_statement statement], columnIdx); // check for a null row if (c) { NSString *s = [NSString stringWithUTF8String:c]; [object setValue:s forKey:[NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)]]; } } }
なんて便利なんだと思ってたら、これデータ型が何であろうとすべて文字型 を突っ込んでいるではないですか。。。
というわけで、ここからHacking。
と思ってたら、すでにやってる人がいたので以下Gist。
kvcMagic: for more than just strings....
いやー、実に便利ですね。
これこそObjective-Cの真骨頂。
パラメータにEntityクラスを渡してやれば、すべてうまく行きそうですね。
ただ、Entityの@property を小文字で定義していたので、上のソースに lowercaseString を入れてやるとうまくいきました。