16

A、B、C の 3 つのエンティティを持つコア データ モデルがあります。A は B と 1 対多の関係を持ち、B は C と多対多の関係を持ちます。A の削除ルール -> B は「Cascade」、B -> A は「No Action」です。B -> C の削除ルールは「アクションなし」、C -> B は「拒否」です。

A エンティティの削除に問題があります。私がしたいことは次のとおりです。

  1. A のインスタンスを削除します (を使用deleteObject:)
  2. 削除は、A に関連付けられているすべての B に伝播します (「カスケード」削除規則のため)。
  3. A に関連付けられているすべての B が削除されます
  4. 関連する B が削除された C に属するすべての関係も削除されます。

少し混乱するかもしれませんので、言い換えてみましょう: A が削除されると、関連するすべての B が削除されます。そして、これらの B を参照する C は、それ以上 B を参照してはなりません。

私のテストでは、「カスケード」削除ルールがまったく機能していません。processPendingChangesA を削除すると、その直後に呼び出します (削除が完了したことを確認するためだけに)。次に、削除前と削除後の NSManagedObjectContext にあった A と B の数を比較します。A のインスタンスは適切に削除されました (A の合計数は、削除前よりも 1 つ少なくなりました)。ただし、B の数は同じままです。そのため、「カスケード」削除ルールが守られていないようです。

A -> B の関係を手動で調べて、各 B を手動で削除できることはわかっています。「カスケード」削除ルールの使用に関する情報は大歓迎です。

4

2 に答える 2

17

私は確かにCoreDataの専門家ではありませんが、さまざまな削除ルールオプションに関するドキュメントを読むと、アクションなしではなく、B->Cの関係をNullifyにする必要があるようです。おそらく、CがまだBへの参照を保持しているため、Bが消えないのでしょうか。

于 2010-01-23T18:00:05.243 に答える
1

に基づく

関連する B が削除された C に属するすべての関係も削除されます。BC にもカスケードが必要であることを示唆しています。

さらに、B を削除する場合は、C も削除する必要があります。再びカスケード。

  • Nullify は、逆の削除ルールとしてよく使用されます*

すなわち。B と A の関係は無効化されます。C と B の関係は無効化されます。C が削除されても、B は削除されないようにします。B が削除されると、A は削除されません。

この当選絵のように。

A--->>B カスケード <---- 無効化

B--->>C カスケード <---- 無効化

于 2013-05-11T01:59:58.200 に答える