削除されるストアに関連付けられた NSManagedObjectContext を他のスレッドが使用しているアプリケーションで、永続ストアを削除する (そして新しいストアを作成する) 安全な方法はありますか?
ライブの管理対象オブジェクトが永続ストアにアクセスしようとしないことを保証できれば安全です。この部分は重要です。古い永続ストアからロードされた、または関連付けられた、いかなる種類のライブ オブジェクトも存在しないことを確認する必要があります。
これは、各管理オブジェクト コンテキストをリセットすることで実行できます。
[managedObjectContext performBlockAndWait:^{
[managedObjectContext reset];
}];
すべての管理対象オブジェクト コンテキストに対してこれを実行したら、永続ストアを削除できます。
これらのコンテキストからフェッチされた管理対象オブジェクトがある場合は、属性値の読み取りや書き込み、またはそれらの値の使用を一切行わずに、すぐにそれらを破棄する必要があることに注意してください。これらのオブジェクトはさまざまな理由でコンテキストを使用する必要があるかもしれませんが、コンテキストを呼び出した後reset
はそれらについて何も知りません。それらは、触った瞬間にアプリを爆破するのを待っている時限爆弾であるため、すぐに(理想的にはリセットを呼び出す前でも)取り除きます。