[英]Delete/clear all button with Core Data Relationships in SwiftUI
我想在這個“課堂”視圖中有一個“全部清除”按鈕,但我真的不知道如何進行。
首先,這是我的以下設置:
// ClassroomView.swift
import SwiftUI
struct ClassroomView: View {
@Environment(\.managedObjectContext) private var viewContext
var classroom: FetchedResults<Classroom>.Element
var body: some View {
ScrollView {
VStack {
// Some Code Here
Button("classroom-button-clear", action: { /* What to write here? */ })
// Some Code Here
ForEach(classroom.studentArray) { student in
StudentView(student: student)
Divider()
}
// Some Code Here
}
}
}
}
struct StudentView: View {
var student: FetchedResults<Student>.Element
var body: some View {
HStack {
Text(student.date!)
Spacer()
Text(student.name!)
}
}
}
extension Classroom {
public var studentArray: [Student] {
let set = student as? Set<Student> ?? []
return set.sorted {
$0.date! > $1.date!
}
}
}
// ClassroomModel.xcdatamodeld
// Entity 1: Classroom (id, date, title, etc...)
// Relation: student - Student - classroom (To Many)
// Entity 2: Student (id, date, name, etc...)
// Relation: classroom - Classroom - student (To One)
如果它是一個簡單的刪除按鈕,它在ForEach(classroom.studentArray)
中可能是這樣的:
// StudentView.swift
Button("student-button-clear", action: {
CoreDataManager.shared.deleteStudent(student: student, context: viewContext)
})
// CoreDataManager.swift
func deleteStudent(student: student, context: NSManagedObjectContext) {
context.delete(student)
save(context: context)
}
但我不知道如何讓它在ForEach
之外工作,並確保每個元素都被刪除,而不僅僅是一個,也許,我也應該將context.delete(student)
放在ForEach
中,但這感覺不對。
你們是怎么做到的? 謝謝。
您可以在接收Classroom
的 CoreDataManager 文件中編寫一個新的CoreDataManager
,並遍歷其所有Student
,刪除其中的每一個。
像這樣:
func deleteStudentsForClassroom(_ classroom: Classroom, context: NSManagedObjectContext) {
classroom.studentArray.forEach {
context.delete($0)
}
save(context: context)
}
然后,您可以調用此 function 從 CoreData 中刪除教室中的所有學生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.