0

私は Core Data と多対多の関係で作業しています。建物には複数の部門があり、部門は複数の建物にある可能性があります。以前にデータベースを扱っていたので、これを Core Data に実装する方法がわかりませんでしたが、Core Data Programming Guide でこれを見つけました。

データベース管理のバックグラウンドがあり、これが懸念される場合でも、心配する必要はありません。SQLite ストアを使用している場合、Core Data は自動的に中間結合テーブルを作成します。

ただし、実際にはデータの整合性はありません。いくつかの建物オブジェクトを挿入しようとしましたが、現時点では属性 (数値) が 1 つしかなく、部門オブジェクト (関係) を設定するたびに関連しています。これにより、データベースには同じ建物番号を持つ複数の建物オブジェクトが含まれ、すべてが異なる部門オブジェクトに関連付けられます。理想的には、建物番号ごとに 1 つのオブジェクトがあり、そこにあるさまざまな部門がすべて含まれています。

それで、私の質問は次のとおりです: Core Data は何らかの方法でデータの整合性を維持できますか、それとも挿入する前にその番号の建物オブジェクトが既に存在するかどうかを確認する必要がありますか? 手動で確認する必要がありそうですが、Core Data がこれをやってくれるといいですね。

4

2 に答える 2

1

Core Data は、データの整合性を維持します。(Core Data での多くの経験から) 手動で整合性をチェックする必要がないことを保証できます。Xcode の Core Data Model Editor で関係と削除ルールがどのように設定されているかを再確認してください。ご提供いただいた詳細の何が問題なのか正確にはわかりませんが、調べてみるとわかります。

于 2012-05-19T06:30:17.283 に答える
1

メルサム書いたことは正しいです。彼の答えに加えて、逆の関係を使用することをお勧めします。逆について、Apple は次のように述べています。

通常、双方向の関係をモデル化し、逆の関係を適切に指定する必要があります。Core Data はこの情報を使用して、変更が行われた場合にオブジェクト グラフの一貫性を確保します (「関係とオブジェクト グラフの整合性の操作」を参照)。双方向の関係をモデル化しない理由と、モデル化しない場合に発生する可能性のある問題については、「一方向の関係」を参照してください。</p>

理解すべき重要な点は、Core Data を操作するときはオブジェクトを操作するということです。したがって、コンテキストを保存するか、保留中の変更も処理するようコンテキストに明示的に指示すると、整合性基準が解決されます (processPendingChangesメソッドを参照)。

あなたの質問については、フェッチ リクエストを作成し、探しているオブジェクトを取得する必要があると思います (たとえば、各オブジェクトに特定の ID を指定し、必要な ID で述語を設定できます)。フェッチ リクエストがいくつかのオブジェクトを取得する場合は、それらを更新できます。そうでない場合は、 で新しいオブジェクトを作成しますinsertNewObjectForEntityForName:inManagedObjectContext:。最後にコンテキストを保存します。

Efficiently Importing Dataについて読むことをお勧めします。

それが役に立てば幸い。

于 2012-05-19T10:30:08.413 に答える