データを更新する(CoreData 手習い#6)

データを更新するCoreData

はじめに

CoreData 手習いその6です。

パターンがなんとなく掴めてきたような気がします。

コンテキストを取得する

今回も元気にコンテキストNSManagedObjectContextを取得します。

func updateData()
{
    let entityName = "WorkerEntity"
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
        fatalError("nilがあらわれた")
    }
    let context = appDelegate.persistentContainer.viewContext
}

更新したいデータを特定する

どのデータを更新するか特定します。
NSFetchRequestクラスのインスタンスにパラメータを設定します。

今回も出欠がfalseのデータがターゲットです。

func updateData()
{
    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 updateData()
{
    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 {
            worker.onduty = true
        }
    } catch let error as NSError {
        print(error)
    }
    appDelegate.saveContext()
}

削除と同様、取得してから一つずつ更新していきます。

更新してみよう

まっさらな状態から、

  • データ書き込み
  • データの読み出し
  • データの更新
  • データの読み出し
  • データの削除
  • データの読み出し

の順で確認していきます。

データの書き込みは前回と同じ日本太郎、米国太郎、豪州太郎さんのお三方。
ondutyfalseの日本太郎さんがの出欠が更新され、最終的に米国太郎、豪州太郎とあわせて3人が残るはずです。

また、ondutyが更新されているので、前回作ったデータの削除処理を実行してもデータが消えないはずです。

書き込んだデータを更新しました。日本さんご出勤。
更新後のデータに対して削除処理をかけてみました

データは消えてません!
😀 OK

次書きました

タイトルとURLをコピーしました