コアデータのすべてのエンティティに保存されているすべてのデータを一括削除する方法はありますか?
IOS 9または10でApple=はバッチ削除を行う方法を導入しましたが、それに関する良い情報を見つけることができないようです。
最終的には、エンティティを通過し、その中のすべてのデータを削除する関数が必要です。それは十分にシンプルであるように思えますが、それに関するドキュメント/チュートリアルは見つけるのが非常に難しいと証明されました。
何かご意見は?
編集
ボタンに接続されたIBActionに次のコードを追加しました。
@IBAction func clearAllData(_ sender: AnyObject) {
let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "PLProjects")
let request = NSBatchDeleteRequest(fetchRequest: fetch)
//get the data from core data
getPLData()
//reload the table view
tableView.reloadData()
}
ただし、これは機能しないようです。プロジェクトを閉じて再度開くと、データはまだそこにあります。データが実際に削除されていないため、これがTable Viewが更新されない理由でもあると考えています。
IOS 9で追加されたNSBatchDeleteRequest
を考えています。次のようなものを作成します。
let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee")
let request = NSBatchDeleteRequest(fetchRequest: fetch)
述語に一致するインスタンスのみを削除する場合は、述語を追加することもできます。リクエストを実行するには:
let result = try managedObjectContext.executeRequest(request)
バッチリクエストは、現在のアプリの状態を更新しないことに注意してください。削除の影響を受けるメモリ内の管理オブジェクトがある場合、それらの使用をすぐに停止する必要があります。
トムの返信を具体化するために、これが完全なルーチンを作成するために追加したものです。
func deleteAllRecords() {
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
let deleteFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "CurrentCourse")
let deleteRequest = NSBatchDeleteRequest(fetchRequest: deleteFetch)
do {
try context.execute(deleteRequest)
try context.save()
} catch {
print ("There was an error")
}
}
CoreDataManagerクラスでコンテキストを取得するメソッドを宣言します
class func getContext() -> NSManagedObjectContext {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
}
if #available(iOS 10.0, *) {
return appDelegate.persistentContainer.viewContext
} else {
return appDelegate.managedObjectContext
}
}
NSManagedObjectサブクラスから上記のメソッドを呼び出します。
class func deleteAllRecords() {
//getting context from your Core Data Manager Class
let managedContext = CoreDataManager.getContext()
let deleteFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Your entity name")
let deleteRequest = NSBatchDeleteRequest(fetchRequest: deleteFetch)
do {
try managedContext.execute(deleteRequest)
try managedContext.save()
} catch {
print ("There is an error in deleting records")
}
}