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),并使用上下文保存数据。