日々精進

新しく学んだことを書き留めていきます

CoreDataでDBに保存しないオブジェクト(Transienty Entity)を作る方法

・DBに保存したくないオブジェクト用のコンテキストを作り、それ経由でオブジェクトを作ったり、データをDBから取得したりする。
 CoreDataでは異なるコンテキストから取得したオブジェクトへの参照を持つことができないので困ることがある。
 例えばPerson→Favoriteのような関連があってPersonはDBの内容を変更したくないがFavoriteは保存したい、という場合素直に異なるコンテキストからデータを取得するとエラーになる。


・データの保存先をメモリにする
・Entityに保存しないオブジェクトフラグを保持しておき、DBにデータを書き込む前に保存しないフラグがONのオブジェクトをコンテキストから削除する


うーん、どれもなんかしっくりこない。というか、DBにデータを保存するときに保存するオブジェクトを[[NSManagedObjectContext defaultContext] save];に渡す仕様にしてくれればよかったのに。
自分の場合は一切DBに保存しなくてよかったのでCoreDataを使わずNSObjectのサブクラスとしてModelを実装した。


参考:Transient Entities and Core Data | Cocoa Is My Girlfriend