アプリを閉じても 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の概念はわかったが、ソースの実行がうまくいかん..