A、B、C の 3 つのエンティティを持つコア データ モデルがあります。A は B と 1 対多の関係を持ち、B は C と多対多の関係を持ちます。A の削除ルール -> B は「Cascade」、B -> A は「No Action」です。B -> C の削除ルールは「アクションなし」、C -> B は「拒否」です。
A エンティティの削除に問題があります。私がしたいことは次のとおりです。
- A のインスタンスを削除します (を使用
deleteObject:
) - 削除は、A に関連付けられているすべての B に伝播します (「カスケード」削除規則のため)。
- A に関連付けられているすべての B が削除されます
- 関連する B が削除された C に属するすべての関係も削除されます。
少し混乱するかもしれませんので、言い換えてみましょう: A が削除されると、関連するすべての B が削除されます。そして、これらの B を参照する C は、それ以上 B を参照してはなりません。
私のテストでは、「カスケード」削除ルールがまったく機能していません。processPendingChanges
A を削除すると、その直後に呼び出します (削除が完了したことを確認するためだけに)。次に、削除前と削除後の NSManagedObjectContext にあった A と B の数を比較します。A のインスタンスは適切に削除されました (A の合計数は、削除前よりも 1 つ少なくなりました)。ただし、B の数は同じままです。そのため、「カスケード」削除ルールが守られていないようです。
A -> B の関係を手動で調べて、各 B を手動で削除できることはわかっています。「カスケード」削除ルールの使用に関する情報は大歓迎です。