データに関する主な操作(フェッチ、更新、追加、削除)はすべてEditingContextを使って行います。EditingContextはデータベースオブジェクトのバッファであり、オブジェクトの状態を管理します。また、EditingContextはTapKitで最も重要なクラスでもあります。
データベースからデータをフェッチするとデータベースオブジェクトの配列が返されますが、このときのオブジェクトはEditingContextが管理します。オブジェクトに変更を加えるとEditingContextに記録され、保存時に新規オブジェクトや削除するオブジェクトとまとめてデータベースに書き出されます。
EditingContextを生成するにはApplication#create_editing_context()
を使います。EdtingiContextはいくつでも生成することができますが、異なるEditingContextを使ってフェッチしたオブジェクトは管理しません。つまり、1つのEditingContextで二度同じデータをフェッチしてもオブジェクトは1つしか存在しませんが、異なるEditingContextでフェッチしたオブジェクトは2つ以上生成されることになります。この場合、例え同じデータを持つオブジェクト同士を比較しても同一とはみなされないので注意してください。
以下の表はEditingContextで使用する主なメソッドです。
メソッド | 説明 |
---|---|
fetch(fetchspec) |
データをフェッチし、データベースオブジェクトの配列を返す。 |
insert(object) |
新しく追加するオブジェクトを登録する。delete されたオブジェクトを登録すると相殺される。 |
delete(object) |
削除するオブジェクトを登録する。insert されたオブジェクトを登録すると相殺される。 |
save |
登録されたオブジェクトをデータベースに保存する。 |
changed? |
オブジェクトの変更や、insert/deleteの登録があれば真を返す。 |
inserted_objects |
追加待ちのオブジェクトを配列で返す。 |
deleted_objects |
削除待ちのオブジェクトを配列で返す。 |
updated_objects |
変更されたオブジェクトを配列で返す。 |
create(name) |
新しいデータベースオブジェクトを生成し、insert して返す。 |