1. ホーム
  2. アイオス

[解決済み】Core Dataの全エントリーを削除/リセットしますか?

2022-04-02 18:08:11

質問

Core Dataに保存されている項目をすべて削除する方法をご存知ですか?スキーマはそのままで、空白にリセットしたいだけなのです。


編集

プログラム的にこれを行い、ユーザーが基本的に reset ボタンをクリックします。

解決方法は?

NSFileManager:removeItemAtPath:: メソッドを使用して、プログラムを使用してファイルを削除することができます。

NSPersistentStore *store = ...;
NSError *error;
NSURL *storeURL = store.URL;
NSPersistentStoreCoordinator *storeCoordinator = ...;
[storeCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];

その後、永続ストアを追加し直して、正しく再作成されるようにするだけです。

プログラムによる各エンティティの繰り返し処理は、時間がかかる上にエラーが発生しやすくなります。 この方法を使うのは、あるエンティティを削除して他のエンティティを削除しない場合です。 しかし、参照整合性が保たれていることを確認する必要があり、さもなければ変更を持続させることができません。

ストアを削除して再作成するだけなら、高速かつ安全であり、実行時にプログラムで確実に実行することができます。

iOS5+に対応したアップデート

iOS 5 と OS X 10.7 で外部バイナリストレージ (allowsExternalBinaryDataStorage または Store in External Record File) が導入されたため、storeURLs が指すファイルを削除するだけでは十分ではありません。外部レコードファイルを残すことになります。この外部記録ファイルの命名規則が公開されていないため、まだ万能な解決策はありません。- an0 May 8 '12 at 23:00