2012-03-06 12 views
0

私のアプリでCoreDataを使用しています。私は「カード」エンティティのセットを持っています。プレイヤーは自分のデッキに同じカードを複数持つことができます(それはデータベースから引き出された同じカードですが、アレイに2回追加されます)。重複したNSManagedObject

重複するカードのいずれかのアスペクトを変更したいときに問題が発生します。これらはすべて、サブクラス化されたNSManagedObjectsです(データベースには保存されません)。たとえば、カスタムプロパティの1つを配列の1つのカードに設定した場合、entityForName:inManagedObjectContext:は同じオブジェクトを返し、新しいオブジェクトをロードしないため、配列の他の同じカードでも変更されます。

基本的に私が必要とするのは、entityForName:inManagedObjectContext:が呼び出されるたびに同じエンティティの新しいインスタンスが取得されるため、1つのカスタムプロパティを変更すると、別のインスタンスでも変更されません。エンティティがすでに作成されていても機能しない場合、[エンティティコピー]を使用して既に試してみました。

ありがとうございました!

答えて

0

コアデータは永続ストアであり、データベースではありません。だから何度もあなたがそれを求めていても、あなたはまったく同じオブジェクトを得ることを保証しています。カスタムSQLコードを作成した場合、それらはデータベースからのスナップショットではなく、実際のライブオブジェクトです。

これを念頭において、Core Dataスキーマを論理スキーマに合わせて設定するか、CardInstanceとCardとの一対一の関係を持つと思います。デッキからカードを引っ張ったときのCardInstancesを作成するか、取得したカードからスナップショットオブジェクトに読み込むコードを書くなど、SQLなどで手動で作業している場合とまったく同じです。