NSBatchDeleteRequestの紹介

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があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です