CoreDataのデータを全部削除する時って、以下のようなコードで行ってました。(エラー処理は省略してます)
fetchして削除
Let query = Tag.fetchRequest()
let results = try? managedObjectContext.fetch(query)
for tag in results {
managedObjectContext.delete(tag)
}
もちろん、動作としては、期待する動作になっているのですが、動作の内容を考えると、一度、データベースからメモリ上に読み込んで削除して、それをデータベースに反映するという動作をしているんですよね。少しもったいないですよね。
iOSだとiOS9から、MacOSだとMacOS10.11以降に、NSBatchDeleteRequestという削除をバッチで行うためのクラスが実装されてました。
以下のような形で使うことができます。
バッチ削除
viewContext.performAndWait {
let fetchReq = Tag.fetchRequest()
let delReq = NSBatchDeleteRequest(fetchRequest: fetchReq)
try? managedObjectContext.execute(delReq)
}
}
動作的には、こちらの方が早いです。
バッチ処理向けには、NSBatchDeleteRequestの他に、NSBatchUpdateRequestがあります。
Sponsor Link