import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) private var context
@FetchRequest(
entity: Note.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Note.timestamp, ascending: true)]
) private var notes: FetchedResults<Note>
@State private var showingAddNote = false
@State private var newNoteText = ""
var body: some View {
NavigationView {
List {
ForEach(notes) { note in
Text(note.text ?? "No Text")
}
}
.navigationTitle("Core Data Notes")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: {
showingAddNote = true
}) {
Image(systemName: "plus")
}
}
}
.alert("Add New Note", isPresented: $showingAddNote, actions: {
TextField("Note text", text: $newNoteText)
Button("Save") {
addNote()
}
Button("Cancel", role: .cancel) { }
})
}
}
private func addNote() {
let newNote = Note(context: context)
newNote.timestamp = Date()
newNote.text = newNoteText
do {
try context.save()
newNoteText = ""
} catch {
print("Failed to save note: \(error)")
}
}
}
@main
struct CoreDataApp: App {
let persistenceController = PersistenceController.shared
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
}
}
}
class PersistenceController {
static let shared = PersistenceController()
let container: NSPersistentContainer
init() {
container = NSPersistentContainer(name: "CoreDataModel")
container.loadPersistentStores { description, error in
if let error = error {
fatalError("Core Data store failed: \(error)")
}
}
}
}
// Core Data Note entity class is generated automatically from model with attributes:
// - text: String?
// - timestamp: Date?This app uses SwiftUI with Core Data to save and display simple notes.
We use @Environment(\.managedObjectContext) to access Core Data context.
@FetchRequest fetches Note entities sorted by timestamp.
The list shows all saved notes.
Tapping '+' shows an alert with a text field to enter a new note.
Saving creates a new Note object, sets its properties, and saves the context.
PersistenceController sets up the Core Data stack with NSPersistentContainer.
This structure keeps UI and data management clean and simple for beginners.