2025-02-18
使用SwiftUI与Core Data结合时,一般遵循以下步骤:
class DataController: ObservableObject {
    let container = NSPersistentContainer(name: "StudentInfo")
    
    init() {
        container.loadPersistentStores { description, error in
            if let error = error {
                print("Core Data failed to load: \(error.localizedDescription)")
            }
        }
    }
}
@Environment(\.managedObjectContext)注解,将Core Data的上下文(viewContext)注入到ContentView中,使得视图可以访问和操作Core Data。@Environment(\.managedObjectContext) var moc
@FetchRequest(sortDescriptors: []) var students: FetchedResults<Student>
Button("Add") {
    let firstNames = ["Ginny", "Harry", "Hermione", "Luna", "Ron"]
    let lastNames = ["Granger", "Lovegood", "Potter", "Wealey"]
    
    let chosenFirstName = firstNames.randomElement()!
    let chosenLastName = lastNames.randomElement()!
    
    let student = Student(context: moc)
    student.id = UUID()
    student.name = "\(chosenFirstName) \(chosenLastName)"
    
    try? moc.save()
}
.environment(\.managedObjectContext, dataController.container.viewContext)将Core Data的上下文传递给应用的视图,使得所有的视图都能够访问并修改Core Data数据。@main
struct CoreData_swiftUIApp: App {
    @StateObject private var dataController = DataController()
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(\.managedObjectContext, dataController.container.viewContext)
        }
    }
}
总结:
创建NSPersistentContainer来管理Core Data的容器。
在ContentView中通过@Environment(.managedObjectContext)和@FetchRequest来管理数据。
在操作(如按钮点击)中创建新的NSManagedObject(例如Student),并使用上下文保存数据。