2

削除したオブジェクトが実際には削除されないという奇妙な問題が発生したようです。これは、 に応答しているときにのみ発生しtheNSManagedObjectContextObjectsDidChangeNotificationます。

より具体的には、A <->> B のリストがあります。カスケードは B の「所有」インスタンス
を削除します。A のインスタンスを削除すると、「所有」の B インスタンスは削除されますが、A インスタンスは削除されません。

[context processPendingChanges];通知ハンドラの先頭で呼び出すと、最後のオブジェクトを削除したときにのみ問題が発生するようです。そうしないと、 A のインスタンスが固執する傾向があります。

というわけで、問題の根源はコアデータについて私が理解していないところにあるようです。なぜ非生産的だったのかを理解する。この動作が見られる理由を誰か挙げてもらえますか?

4

1 に答える 1

0

これが発生する可能性がある2つの理由を見つけました。

A) 私の場合、最初の戦略は、削除された管理対象オブジェクトの一時的なグラフを組織の便宜のために作成することでした。一時的な管理オブジェクト コンテキストで削除されたオブジェクトを変更する必要があります。そうしないと、削除されたオブジェクトに加えた変更が削除に取って代わります。(古い) 削除された管理対象オブジェクトの操作が完了したら、すぐに一時コンテキストをリセットします。
B) オブジェクトは、削除時に参照カウントが 0 でなければなりません。これは、削除する前に、取得したすべての結果コントローラー、NSArray などから解放する必要があることを意味します。

A と B を満たすことで、この問題は解決しました。

于 2013-05-15T18:51:06.607 に答える