家計簿ソフトの作成メモ
家計簿を付けるソフトを何か DB を使って作ろうと(だいぶ前に)思い立ちましたが、サーバなどを立てなくてもよい簡単な DB、SQLite を選択しました。
私はマカーなので、当然!Xcode を使って Cocoa アプリを作るわけです!!
Cocoa フレームワークは言語に Objective-C を使用していますが、Objective-C は C に毛が生えたようなもので、実際その内部に C の関数を書けるほど C に近い言語です。なので、SQLite3 との接続も C/C++ API を使えば OK です。
そんな訳でこれまでの記事でちまちまと SQLite3 のドキュメントを訳していて、今日それらがやっと日の目を見たのでした。
作っていく過程で突っ掛かってしまったポイントを並べてみます。
- NSTableView と NSTableDataSource
NSTableView というクラスは名前の通り、テーブルの描画に専念するクラスです。行の高さの設定とか列の値による並び換えなどを行っています。なので、データを持つ役割は NSTableDataSource が引き受けこのクラスのインスタンスを操作し、NSTableView の reloadData メソッドを呼び出すことで、値の更新などを行います。
この NSTableDataSource は非形式プロトコル(Java で云う interface)なのですが、どう実装していいのやらちんぷんかんぷんで長々と放ってありました。しかし、今日偶然http://journal.mycom.co.jp/column/objc/010/index.html:ここで記事を見付け、やっと非形式プロトコル NSTableDataSource の使い方が分かりました。NSObject に既に適用(って云い方で良いのか?)されてるから、必要なメソッドさえ宣言すれば良かったのです。
C でちょいちょいと、SQLite3 DB にアクセスしてテーブルの値を読み出すプログラムを書き、しめしめ上手く行ったとそのコードを Xcode の方にコピペして動かしてみると、テーブルが読めません!あれ、同じ DB を読んでるはずなのに!?
Google 先生で色々調べていくと、
- SQLite3 のテーブル情報の取得
"select name from sqlite_master" でテーブル情報が取得できる。
という情報を得、「じゃあ、テーブルがちゃんとあるか調べてみよう。」と SQL を書き直して実行したところ、「取得行数=0」。!?あれ?なぜだ?
さらに Google 先生にお伺いを立ててみると
- SQLite3 の DB の自動作成
SQLite3 で DB 接続を行う際、指定された DB が無かった場合は空の DB が作成される。
という動作をするんだそうな。「そうかこのファイルサイズが 0KB の DB を参照してたのね。」と DB ファイルを見付け、
- Xcode の current directory は、Project_Dir/build/Debug/
ということも知りました。いやー、知らないことを2ついっぺんに学ぶときは、どこを知らなくて躓いているのか考えないとドツボですね(滝汗)
てな感じの紆余曲折を経て、無事テーブルの内容を表示するだけのプログラムが書けました。
まだ完成していないのでコードなどなどは載せられませんが、完成した暁には日記にコードを載せようと思います。ここまで読んでくれた方、ありがとうございました。
今年も衝動日記をよろしくお願い申し上げます(遅)