コアデータのバッチ削除に関して多くの質問がありましたが、問題は解決していないようです。コアデータNSBatchDeleteRequestがオブジェクトをコンテキスト内に残しているように見える
コアデータを使用してiOS 9/Swiftアプリケーションを作成しています。今年のWWDCでは、Core Dataセッションに出席し、NSBatchDeleteRequest
を使用して永続ストアから直接多数のオブジェクトを削除することができたことがわかりました。これは私のためにいくつかのオブジェクトでは動作しますが、他のものでは動作しません。私はそれが私の関係と関係があると思います。
私はSubject
とCourse
というオブジェクトグラフを持っています。そこには1対多の関係があります。科目は希望する数のコースを所有することができます。
私はsubject
が削除されたときsubject
に関連付けられているすべてのコースを削除することにしたいようCascade
の削除規則を持つSubject
の「コース」の関係が、あります。
逆は、Course
で「件名」、削除ルールはNullify
です。ここで、私はNullify
のAppleの説明に、ビット混乱しています:
オブジェクト間の関係を削除するが、いずれかのオブジェクトを削除しないでください。 これは、従業員の部署関係がオプションである場合、または次の保存操作の前に従業員ごとに新しい部署を設定した場合にのみ意味を持ちます。
これはかなり明確ですが、なぜ関係は削除されるのでしょうか、どちらのオブジェクトも削除されませんか?私はCourse
を削除した場合、私はCourse
を削除すると、削除Course
に障害がSubject
のcourses
セットにNSSet
に表示されないようにcourse
へsubject
から関係が削除されるようにしたいと思います。
エンティティ内のすべてのオブジェクトを削除する方法を提供したいと考えています。個別に取り出して削除しようとすると、course
、courses
が正しく削除され、Subject
ののcourses
から削除されます。
courses
がいくつあるかわからず、すべての状況で高性能を確保したいので、すべてを削除するにはバッチ削除を使用すると考えましたcourses
。問題は、Subjects
すべてを削除するのにNSBatchDeleteRequest
を利用している間に、courses
の道に沿って(Cascade
のルールのために)すべてを削除しようとすると、すべてのオブジェクトをそのまま残しているように見えます。
私はすべてのCourses
を削除するNSBatchDeleteRequest
を使用し、私は何Subjects
とCourses
がまだ存在して見ることがMOC
を照会すると、その後、両方のCourses
はまだ返されており、それらを所有するSubject
はまだそれらへの参照を持っています。これとは対照的に
、私はフェッチと個別Course
を削除し、私のその後の適切すべてCourses
とSubject
の「コース」の関係が適切に変更されているように見えるため、空の配列を表示フェッチ。
はい、リクエストを実行した後にコンテキストを保存しています。コンテキストが店舗の機能について通知されない場合がありますが、すべてを再度削除すると、subjects
はうまく機能しました。ここで何が起こっているのですか?
バッチ削除では削除ルールが無視されます。 https://stackoverflow.com/questions/32915874/can-i-use-nsbatchdeleterequest-on-entities-with-relationships-that-have-delete-r/46073965#46073965 – LShi