[iOS] CoreData

アプリを閉じても Core Data に保存される(永続化)

Xcode で新しいプロジェクトを作るときに
「Use Core Data」にチェックを入れます ☑️
これで自動的に以下が追加されます:
YourAppName.xcdatamodeld(データモデル)
Persistence.swift

ステップ 2:データモデルを定義
YourAppName.xcdatamodeld を開いて「+」を押し、
新しい Entity を作成します:

Entity 名:Memo
Attribute:
text(String)
timestamp(Date)

import SwiftUI
import CoreData

struct ContentView: View {
    // Core Data の管理オブジェクトコンテキスト
    @Environment(\.managedObjectContext) private var viewContext

    // 保存済みメモを取得して監視
    @FetchRequest(
        sortDescriptors: [NSSortDescriptor(keyPath: \Memo.timestamp, ascending: false)],
        animation: .default)
    private var memos: FetchedResults<Memo>

    @State private var newMemo: String = ""

    var body: some View {
        NavigationView {
            VStack(spacing: 20) {
                // メモ入力欄
                TextField("メモを入力", text: $newMemo)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .padding(.horizontal)

                // 保存ボタン
                Button(action: addMemo) {
                    Label("保存", systemImage: "square.and.arrow.down")
                }
                .buttonStyle(.borderedProminent)

                Divider()

                // メモ一覧
                List {
                    ForEach(memos) { memo in
                        VStack(alignment: .leading, spacing: 4) {
                            Text(memo.text ?? "")
                                .font(.headline)
                            if let date = memo.timestamp {
                                Text(date, style: .date)
                                    .font(.caption)
                                    .foregroundColor(.gray)
                            }
                        }
                    }
                    .onDelete(perform: deleteMemos)
                }
                .listStyle(.inset)

                Spacer()
            }
            .navigationTitle("メモ帳")
            .toolbar {
                EditButton()
            }
        }
    }

    // MARK: - Core Data 操作

    /// メモを追加
    private func addMemo() {
        guard !newMemo.isEmpty else { return }
        let memo = Memo(context: viewContext)
        memo.text = newMemo
        memo.timestamp = Date()

        do {
            try viewContext.save()
            newMemo = ""
        } catch {
            print("💥 保存エラー: \(error.localizedDescription)")
        }
    }

    /// メモを削除
    private func deleteMemos(at offsets: IndexSet) {
        for index in offsets {
            let memo = memos[index]
            viewContext.delete(memo)
        }

        do {
            try viewContext.save()
        } catch {
            print("💥 削除エラー: \(error.localizedDescription)")
        }
    }
}

// MARK: - プレビュー用

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        // プレビューでも Core Data のコンテキストを注入
        let context = PersistenceController.preview.container.viewContext
        ContentView()
            .environment(\.managedObjectContext, context)
    }
}

CoreDataの概念はわかったが、ソースの実行がうまくいかん..