過去Blogこのブログのチュートリアルを順に読み進めてくださった方なら、このチュートリアルがUITableVIewを優先的に取り組んできたことをご存知かと思います。この理由としては、多くのアプリケーションが、このシンプルなコントロールを使って開発されているからです。今回はUITableViewの最後のチュートリアルとして、今までのチュートリアルで学んできたことをすべて使い、SQLiteの技術を追加し、ToDoリストを作成していきます。多くの機能を持ったテーブルセルを追加し、iPhoneが提供している他のコントロールについても学んでいきます。過去の記事を既読の方を想定していますので、まだの方は、そちらの記事に先に目を通されることをおすすめします。このチュートリアルは、いくつかのシリーズから成り立つので、過去の記事に比べ少し長くなります。この最初のチュートリアルで学ぶことは以下です。新規作成データベースの作成プロジェクトにデータベースの追加SQLite3のフレームワークを追加ToDoクラスのオブジェクトの作成データベースの初期化それでは始めましょう。XCodeを起動し、新規プロジェクトを作成します。選択し、名前は「todo」とします。次に、todoデータベースを作成します。あなたのMac上のターミナルを起動してください。起動し、「ターミナル」もしくは、「terminal」と入力すれば、見つかると思います。以下、ターミナルを使って、SQLiteデータベースを作成する方法について書きますが、ターミナルが苦手な方は、便利なGUIツールを使ってデータベースを作成することも可能ですので、その場合は、こちらの記事を参考にしてください。XCodeがインストールされていれば、既にsqlite3もインストール済だと思いますので、ターミナル上で、sqlite3と入力します。これでsqlite3が起動します。sqlite3を終了するには.quitと入力します。sqlite3がインストールされていない場合は、インストールしてください。インストール方法については、ネット検索すれば、多くの記事が見つかると思います。それでは、データベースを作成していきます。todo.sqliteターミナル上からsqliteにアクセスしていない状態で、上記のコマンドを実行します。これで、SQLiteが起動し、「todo.sqlite」というデータベースが読み込まれます。データベースの初期状態では、テーブルは存在せず、空の状態です。今回作成するアプリケーションは単純なので、データベースは1つのみ作成します。以下のコマンドを実行し、「todo」という名前のテーブルを作成します。BOOLEAN);sqlite内で使うコマンドは最後に「;」が必要です。データベース作成コマンドの形式は、以下です。・・・);先ほど実行したコマンドを簡単に説明します。todoという名前のテーブルを作成するという意味です。integer型の「pk」という名前のカラムを作り、テーブルのプライマリーキーに設定しています。1つずつ増加していきます。これにより、各行をユニークなものとして定義することが出来ます。その他の項目は、プライマリーキー以外の部分は同じ仕様なので、分かるかと思います。これで、必要なテーブルが作成されましたので、いくつかデータを追加していきましょう。最終的にはアプリケーション側からtodo項目を追加していきますが、今は、ターミナルから、いくつかデフォルトのものを設定していきます。以下のコマンドをターミナルで実行してください。VALUES(‘ゴミを捨てに行く’,2,0);これでいくつかのtodo項目が追加されました。値は1~3の数値が配置されていますが、これについては、後ほど触れることにします。ここまでで、必要なデータベースは作成されましたので、sqlite3を終了します。それでは、XCodeに戻りましょう。ファイルを探し追加します。場所にsqliteファイルが作成されていると思います。それを見つけて追加をクリックすると以下のような画面が出てきます。「デスティネーション...」の項目をチェックして「追加」をクリックください。追加されると以下のようにResourceフォルダに追加されます。これで、データベースの追加が出来ましたので、これを使えるようにするためにObjective-Cのライブラリを読み込みます。既存のフレームワークを選択します。「libsqlite3.0.dylib」を探し、追加します。これで以下の画像のように選択したフレームワークが追加されます。todoの情報を扱うために、あるオブジェクトを作る必要があります。最終的には、これらの情報の配列を作成しUITableViewで利用します。サブクラスを追加します。名前は、Todo.mとして、”同時にtodo.hも作成する”にチェックし、保存してください。Todo.hを開き、以下のように編集します。*)db;@endいくつかの新しい記述がありますね。sqlite3型のデータベース変数です。これはアプリケーションのデータベースを参照し、todoオブジェクトとやりとりを可能にするものです。#import文を忘れないようにしてください。ついてですが、プロパティで宣言されているassignとreadonlyは、コンパイラにこの変数は一度設定されると、変更されないと宣言するものです。これによって、各todo項目はユニークだと定義されます。宣言していますが、これはこのオブジェクトのコンストラクタです。このコンストラクタは、整数型をとります。このメソッドを実装していきましょう。開き、以下のように編集してください。self;}@endこのコードには新しい記述がいくつかありますので、説明していきます。nilこれはデータベースからtodoデータを取得するときに初期化されたステートメントを保持します。このステートメントは任意のインスタンスから独立しており、静的です。始まる行は、todoオブジェクトが初期化される前に、親クラスであるNSObjectクラスを初期化します。initWithPrimaryKeyメソッドに渡されたパラメータは、ローカルの主キーとデータベースオブジェクトを設定します。nil)の行は、アプリケーションの起動ごとに一度だけ発生します。それがnullの場合は、SQLステートメントを含む新しい文字列を作成します。SQLに詳しい方には、一つの例外を除いて、簡単なSQL文になっていると思います。なんで”?”があるんでしょうか。SQL文がコンパイルされた後、そこ(?マーク)に値を置き換えることが出来ます。行は、init_statementに保持し、準備をしています。このif行は、正しく処理が完了したかどうかをチェックし、問題があればエラーを表示します。行は、単純に?マークとtodoオブジェクトのプライマリーキーを置き換えています。以下のような文になります。メソッドが呼び出されています。このメソッドはデータベース上でSQL文を実行します。これで、ついにtodoデータにアクセスできるようになりました。次の行にいきましょう。sqlite3_column_text(init_statement,0)];とても長い一文ですね。詳しく見ていきましょう。メソッドは、データベースから文字列のオブジェクトを取り出すことをSQLに伝えます。これは2つのパラメータを持っています。最初のパラメータは、使用されているSQLへの参照で、2つ目は、文字列を取り出したいカラム番号を指定します。今回のケースでは、1つのカラムしか持たないため、「0」という1つのインデックスしかありません。*)は、文字列へキャストします。(不要かもしれませんが、推奨します。self.textに割り当てます。開き、以下のように編集してください。todoオブジェクトを作成していることに注意してください。これは、前回のフルーツの例のように、todoアイテムを操作する配列です。最終的にはこの配列をつかって、UITableViewを作成します。行が追加されています。それでは、todoAppDelegate.mを開き、いくつかコードを追加していきます。todos;ここでは新しく、プライベートなインターフェースを宣言しています。ファイルで宣言する必要がないので、ここに宣言しています。initializeDatabaseです。チュートリアルに書かれています。localizedDescription]);}}このメソッドが本質的にはしていることは、あなたのプロジェクトフォルダーから、iPhone上のドキュメントフォルダーへ、データベースをコピーしています。これは、ドキュメントフォルダに既にデータベースが存在するかの最初のチェック時のみ発生します。関数や変数の名称が、とても理解しやすいように、appleが記述してくれているので、名前を追っていけば、理解しやすいと思います。次にinitializeDatabaseの機能を実装していきます。以下のコードを追加してください。最初の行は、NSMutableArrayを作成し、初期化しています。私たちのオブジェクトのtodos配列にこの配列を設定して、一時的なオブジェクトをリリースします。その次の3行は、ドキュメントフォルダの中に作成されたデータベースを探します。sqlite3_openの行は、データにアクセスするためにデータベースに接続します。正常に接続されれば、todoアイテムを取り出します。todo”;この行は、プライマリーキーを取得するためのSQL記述です。行ったのと同様の記述を準備します。プライマリーキーを取得する条件がないため、今回は”?”マークはありません。すべてのデータベース上のプライマリーキーが欲しいだけなので。文で各結果からプライマリーキーを取り出しています。クラスで文字列を取り出すのによく似ています。使われている点をが違うだけです。コンストラクタを呼び出しています。プライマリーキーはデータベースへの参照として渡されています。最終的に、私たちは新たに作成されたTodoオブジェクトをtodosの配列に加えます。このチュートリアルの最後として、データベースを作成し、初期化するために、これらの機能を呼び出します。箇所に以下を追加してください。YES;}単に、これらの機能を呼び出しました。今回のチュートリアルは、これで完了ですが、この状態でビルドして実行しても、何も表示されません。PMToDO型ではありませんが、自分も初アプリに挑戦中で、しかもデータ書き出しを必要とするのでNSUserDefaultでいいか、それともSQLiteなのか、と悩んでいたところでした。非っ常に参考になって助かっています。PM@loop_26コメントありがとうございます!私自身、iPhoneアプリに関しては、全くの初心者ですので、海外のチュートリアルを参考にしながら、自分で実行し、勉強している状態です。拙い解説ではありますが、同じような境遇の方の参考になれば嬉しいなと思ってます。[8]:SQLiteを使ってToDoリストアプリを作成(4)コメントを残すコメントをキャンセルメールアドレスが公開されることはありません。タグと属性が使えます。<strong>名前(必須)メール(必須/公開されません)サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。過去Blog以下のようにSQLを実行することで該当箇所が置き換えされます。phpのstr_replaceのような感じ。過去Blogとても丁寧に解説してくれているサイトがあったので、メモしておきます。過去Blog以下のサイトを参考にすれば、ダウンロード商品の登録が出来ました。書いたコードと接続し、動作させてみます。