珍しくプログラミング回です。
以前に Ruby on Rails で家計簿を作ったのですが,Web から入れるのでいちいち mac を起動するのが面倒になってきたため,iPhone でアプリにすればいいやと思って今日作り始めました。AppStore を探せば秀逸な家計簿アプリはたくさんあるのですが,これまで使っていたデータをそのまま移行したいのと,個人的に入力にこだわりがあるので自分で好き勝手に作った方がいいやと思い,自作することに。
データベースを使う
Rails で作ったのが SQLite3 を使っていたので,そのファイルをそのまま Xcode で作ったプロジェクトに入れてアクセスすればいいや,と。仕事でも iOS の開発で Objective-C から SQLite3 を使っているので同じようにやればいいと思っていたら,自宅のは Xcode7 になっていてちょこっとハマりました。
FMDB を使って簡単 DB アクセス
仕事では素で SQLite3 へアクセスするコードを書いていますが,面倒なので FMDB というライブラリを使います。
GitHub で絶賛公開中。ソースを自分のところへ取り込めば OK です。ただし,fmdb.m
だけはサンプルで不要です。とりあえずこんなコードを書いてみた。
NSString *templatePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"development.sqlite3"]; FMDatabase *db= [FMDatabase databaseWithPath:templatePath]; NSString* sql = @"select * from accounts where ymd = '20150618'"; [db open]; FMResultSet *results = [db executeQuery:sql]; while ([results next]) { NSString *ymd = [results stringForColumn:@"ymd"]; NSString *time = [results stringForColumn:@"time"]; NSString *dayofweek = [results stringForColumn:@"dayofweek"]; NSString *store = [results stringForColumn:@"store"]; NSString *category = [results stringForColumn:@"category"]; NSString *money = [results stringForColumn:@"money"]; NSLog(@"ymd : [%@]", ymd); NSLog(@"time : [%@]", time); NSLog(@"dayofweek : [%@]", dayofweek); NSLog(@"store : [%@]", store); NSLog(@"category : [%@]", category); NSLog(@"money : [%@]", money); } [db close];
環境設定が従来と異なる
コードはいいんですが,Xcode で取り込むライブラリとかが変わっています。
従来は Xcode の Build Phases にある Link Binary With Libraries に sqlite3.0.dylib
というライブラリを取り込みますが,ありません。まずここでハマりました。調べてみたら,
やっぱり同じことでハマっている人がいました。やり方としては,上記画面の Add Other... で /usr/lib
を指定して libz.dylib
を選べば OK です。そのあと,
この太字のところ Other Linker Flags
に -lsqlite3
を設定します。これでコンパイルが通ります。
SQLite3 へアクセスできた
以上で SQLite3 に Objective-C からアクセスできました。あとは SQL をいじれば好きにデータが出し入れできるので家計簿開発も捗ることでしょう。