はじめに
CoreData 手習いその5です。
コンテキストを取得する
コンテキストNSManagedObjectContext
を取得します。もはやお決まりの定型句ですね。
func deleteData()
{
let entityName = "WorkerEntity"
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
fatalError("nilがあらわれた")
}
let context = appDelegate.persistentContainer.viewContext
}
消したいデータを特定する
データを消すに当たって、どのデータを削除するか特定しないといけません。そこで、NSFetchRequest
クラスのインスタンスにパラメータを設定します。
今回は出欠がfalse
のデータがターゲットです。
func deleteData()
{
let entityName = "WorkerEntity"
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
fatalError("nilがあらわれた")
}
let context = appDelegate.persistentContainer.viewContext
let workersFetch = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
let predicate = NSPredicate(format: "onduty = false")
workersFetch.predicate = predicate
}
データを削除する
ターゲットとなるデータが決定したら、まずデータを取得します。その後で、取得したデータを順次消していきます。
func deleteData()
{
let entityName = "WorkerEntity"
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
fatalError("nilがあらわれた")
}
let context = appDelegate.persistentContainer.viewContext
let workersFetch = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
let predicate = NSPredicate(format: "onduty = false")
workersFetch.predicate = predicate
do {
let workers = try context.fetch(workersFetch) as! [WorkerEntity]
for worker in workers {
context.delete(worker)
}
} catch let error as NSError {
print(error)
}
appDelegate.saveContext()
}
直接消していくのではなくて、取得してから一つずつ消すのか。
ということは、
func deleteData(_ dataSet:[WorkerEntity])
{
let entityName = "WorkerEntity"
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
fatalError("nilがあらわれた")
}
let context = appDelegate.persistentContainer.viewContext
do {
for worker in workers {
context.delete(worker)
}
} catch let error as NSError {
print(error)
}
appDelegate.saveContext()
}
というのもアリということですね。型を[WorkerEntity]
とか固定しているので不格好ですが:D
実際に消してみよう
- データ書き込み
- データの読み出し
- データ削除
- データの読み出し
の順で確認していきます。
データの書き込みは前回と同じ日本太郎、米国太郎、豪州太郎さんに登場いただきます。削除ターゲットはonduty
がfalse
の日本太郎で、最終的に米国太郎、豪州太郎が残ることを期待します。今更ですが、日本/米国/豪州には特段深い意味はありませんよ。
いえ~い!!