2011-07-17 17 views
0

現在、CoreDataを使用してオブジェクトを永続的に保存するiPhoneアプリケーションに取り組んでいます。CoreDataで同じタイプの永続オブジェクトと非永続オブジェクトを持つ

私のポイントを明確にする私はシナリオの中にあなたの短い導入を与えたい:

私は、インターネットからの照会いくつかのデータを持っています。このデータをMyDataという名前のオブジェクトに保存し、必要な場所で使用します。データが使用されるとき、永続的に保存したいので、MyManagedDataオブジェクトに保存します。

私は実際にデータを保存するこの解決策が嫌いです。正確に同じデータを保存する2つのクラスがありますが、1つはCoreDataによって管理されるためです。

管理対象オブジェクトをCoreDataに自動的に保存せずにインスタンス化する方法はありますか?だから私はMyManagedDataオブジェクトを持って、それらの束だけを保存することができますか?あなたはそのようなことをどうやって作りますか?

挨拶

答えて

2

1つの実行可能なアプローチは、2つの管理オブジェクトコンテキストを持つことです。メインの永続化されたデータのコンテキストをすでに使用しているので、保存しないで「スクラッチ」データの新しいコンテキストを作成することができます。

件名には、http://www.timisted.net/blog/archive/multiple-managed-object-contexts-with-core-data/のようないくつかの記事があります。

私はInnerBandを使用してCoreDataを支援しています。私のコードは単純化されていて、途中で取り込まれません。あなたがInnerBandを使用している場合

、(保存されません)過渡エンティティを格納するための一時的なコンテキスト/ストアを作成するだけで次の操作を行った場合でなければなりません:

明らか
// note - not calling [CoreDataStore mainStore] here -- 
// we use that for persisted main data 
self.temporaryStore = [CoreDataStore createStore]; 

// and then create temporary entities like so: 
MyEntityClass *myEntity = [MyEntity createInStore:self.temporaryStore]; 

、あなたはそれとして、[self.temporaryStore save]を呼び出すことはありません一時データのみです。

注:私はまだ上記の戦略を自分で試していませんが、実行可能であると信じています。

N.B.関連する問題では、mogeneratorも使用しています。エンティティクラスを生成する際に苦労します(エンティティクラスを再生成するときに、エンティティクラスに追加したカスタムコードが壊れるのを防ぐ)。

0

最も簡単な解決策は、あなたがコンテキストを保存する前に、あなたは、もはやする管理対象オブジェクトを削除しています。そうすることで、コンテキストは永続ストアに保持したいオブジェクトだけを書き出します。

しかし、私は気にしません。オブジェクトが不要になったときにオブジェクトを削除し、特定の時間にディスクに書き込まれたかどうかを心配しないように、コンテキストを指示するだけです。あまりデータがない場合は、一度にすべてのデータをメモリに保存しておけば、それらのオブジェクトをディスクに書き込んで後で削除するだけのオーバーヘッドはほとんどありません。

+0

Thx。しかし、時々保存されたperhabsされるすべてのオブジェクトのためのNSMangedObjectを持つことは、私が本当にやらなければならない場合、私は実際に対処したくないボイラープレートのコードを含みます。 – Kie

+0

オブジェクトの2つの異なるセットをトラッキングするオーバーヘッドと比較しても、一部は保存され、残りのオブジェクトはトラッキングされません。あなたの名前とコアデータの使用の説明に基づいて、私はあなたがそれを適切に使用しているとは思わない。私は時間と労力を節約するために間違った試みで時間と労力を無駄にしていると思います。 – TechZen

+0

それは良い点かもしれません。私は私のシステム内で、オブジェクトからオブジェクトにパラメータまたは戻り値として渡すオブジェクトのクラスをいくつか持っています。私はこのオブジェクトを作成して使用しなければならない場合もあれば、それを解放する必要もあります。そうでない場合は、このオブジェクト(またはそれらに含まれるデータ)が必要です。 このオブジェクトデータを保存するためのコンテナを用意するのが最善の方法でしょうか?またはこれは間違った使用ですか?私は自分自身をラッパー自分自身のSQLiteを書きたい場合 は、私は私に、このようなオブジェクト内の一部のデータベースエントリのデータを提供するローダークラスを実装します。 – Kie

関連する問題