私のアプリは、現在のユーザーの多くのデータをCoreData永続ストアに保存します。ユーザーがログアウトした場合、このデータをすべて削除して最初からやり直したいと思います。
現在、私のコードは次のようになっています。
NSError *error;
[_managedObjectContext lock];
[_managedObjectContext reset];
[_persistentStoreCoordinator removePersistentStore:_persistentStore error:&error];
[[NSFileManager defaultManager] removeItemAtURL:[_persistentStore URL] error:&error];
// error handling here
_persistentStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self _storeURL] options:nil error:&error];
[_managedObjectContext unlock];
しかし、何をしても、次にフェッチリクエストを実行すると、すべての古いデータが返されます。実際のファイルがファイルシステムから削除されていることを確認したので、このデータはどこかのメモリから取得されているようです。上記のコードを試し、管理対象オブジェクトのコンテキストをnilにリセットして最初からやり直そうとしましたが、アプリを終了して再実行するまで、変更は行われていないようです。
編集:実際には、アプリを終了することさえ何もしません。行の後にあるフォルダーからsqliteファイルが消えNSFileManager
、新しい永続ストアを追加した行に、古いストアの正確なコピーが再作成されます。
編集:さて、私はコアデータのデバッグをオンにしました。電話をかけるとすぐにremovePersistentStore:
「sqliteデータベースから切断されました」と表示されます。次の行、、データベースの内容をメモリから魔法のように復元していると思われる大量addPersistentStoreWithType:
のINSERT
ステートメントが表示されますか?私はそれを得ることができます...それをしませんか?
編集:まあ、今のところ、管理対象オブジェクトをループしてデータストアのコンテンツを手動で削除するだけです。これはどういうわけか機能します。このプロジェクトにとって幸いなことに、ユーザーは数百のオブジェクトしか持っていないので、それほど時間はかかりませんが、何が起こっているのかを理解したいと思います...