はじめに
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()
}
削除と同様、取得してから一つずつ更新していきます。
更新してみよう
まっさらな状態から、
- データ書き込み
- データの読み出し
- データの更新
- データの読み出し
- データの削除
- データの読み出し
の順で確認していきます。
データの書き込みは前回と同じ日本太郎、米国太郎、豪州太郎さんのお三方。onduty
がfalse
の日本太郎さんがの出欠が更新され、最終的に米国太郎、豪州太郎とあわせて3人が残るはずです。
また、onduty
が更新されているので、前回作ったデータの削除処理を実行してもデータが消えないはずです。
データは消えてません!
😀 OK
次書きました