[Terlambat menjawab sebagai balasan atas karunia yang meminta tanggapan yang lebih baru]
Melihat jawaban sebelumnya,
- Mengambil dan menghapus semua item, seperti yang disarankan oleh @Grouchal dan lainnya, masih merupakan solusi yang efektif dan berguna. Jika Anda memiliki penyimpanan data yang sangat besar maka mungkin lambat, tetapi masih berfungsi dengan baik.
- Menghapus data store saja, seperti yang Anda dan @groundhog catat, tidak lagi efektif. Ini usang bahkan jika Anda tidak menggunakan penyimpanan biner eksternal karena iOS 7 menggunakan mode WAL untuk penjurnalan SQLite. Dengan mode WAL mungkin ada (berpotensi besar) file jurnal yang ada di sekitar untuk penyimpanan persisten Data Inti.
Tetapi ada pendekatan berbeda yang serupa untuk menghapus toko persisten yang berfungsi. Kuncinya adalah menempatkan file toko tetap Anda di sub-direktori sendiri yang tidak mengandung hal lain. Jangan hanya menempelkannya di direktori dokumen (atau di mana pun), buatlah sub-direktori baru hanya untuk toko persisten. Isi direktori itu pada akhirnya akan menjadi file store persisten, file jurnal, dan file biner eksternal. Jika Anda ingin menghapus seluruh penyimpanan data, hapus direktori itu dan semuanya akan hilang.
Anda akan melakukan sesuatu seperti ini ketika menyiapkan toko tetap Anda:
NSURL *storeDirectoryURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"persistent-store"];
if ([[NSFileManager defaultManager] createDirectoryAtURL:storeDirectoryURL
withIntermediateDirectories:NO
attributes:nil
error:nil]) {
NSURL *storeURL = [storeDirectoryURL URLByAppendingPathComponent:@"MyApp.sqlite"];
// continue with storeURL as usual...
}
Lalu ketika Anda ingin menghapus toko,
[[NSFileManager defaultManager] removeItemAtURL:storeDirectoryURL error:nil];
Itu secara rekursif menghapus sub-direktori kustom dan semua file Core Data di dalamnya.
Ini hanya berfungsi jika Anda belum memiliki toko tetap di folder yang sama dengan data penting lainnya . Seperti direktori dokumen, yang mungkin memiliki hal-hal berguna lainnya di dalamnya. Jika itu situasi Anda, Anda bisa mendapatkan efek yang sama dengan mencari file yang Anda lakukan ingin menyimpan dan menghapus segala sesuatu yang lain. Sesuatu seperti:
NSString *docsDirectoryPath = [[self applicationDocumentsDirectory] path];
NSArray *docsDirectoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:docsDirectoryPath error:nil];
for (NSString *docsDirectoryItem in docsDirectoryContents) {
// Look at docsDirectoryItem. If it's something you want to keep, do nothing.
// If it's something you don't recognize, remove it.
}
Pendekatan ini mungkin rawan kesalahan . Anda harus benar-benar yakin bahwa Anda tahu setiap file yang ingin Anda simpan, karena jika tidak, Anda dapat menghapus data penting. Di sisi lain, Anda dapat menghapus file biner eksternal tanpa benar-benar mengetahui nama file / direktori yang digunakan untuk menyimpannya.
NSBatchDeleteRequest
. stackoverflow.com/a/31961330/3681880