我正在一个项目上,以期在分数,百分比,记录,学生档案等方面,使教师的生活变得更加轻松……到目前为止,很好,除了我无法使用'.onDelete正确删除核心数据',因为我将科目设置为按年级分组,然后先然后展现自己,就像image linked here。
我尝试将'.onDelete'应用于外部的'ForEach',但是其行为同样不稳定,而且我无法弄清楚如何将其正确传递给IndexSet。
希望澄清的事情清单:
我认为'.onDelete'使用要在主视图中删除的实体的位置作为创建顺序中的实体位置来删除我的实体。我的意思是,如果我选择删除显示的最后一个,“。onDelete”将删除最新的,如果我选择显示的第一个,它将删除最旧的。
谢谢!
import SwiftUI
struct SubjectsSortedByGrade: View {
@Environment(\.managedObjectContext) var moc
var subjects: FetchedResults<Subject>
var grades: [Int : [Subject]] {
Dictionary(
grouping: subjects,
by: { Int($0.grade) }
)
}
func filterByGrade(_ value: Int) -> [Subject] {
var filteredSubjects = [Subject]()
for subject in subjects {
switch Int(subject.grade) {
case value:
filteredSubjects.append(subject)
default:
break
}
}
return filteredSubjects
}
func removeSelectedSubjects(at offsets: IndexSet) {
for offset in offsets {
let subject = subjects[offset]
moc.delete(subject)
}
try? moc.save()
}
var body: some View {
ForEach(grades.keys.sorted(), id: \.self) { grade in
Section(header: Text(readableGrade(grade))) {
ForEach(self.filterByGrade(grade), id: \.id) { subject in
Text(subject.name ?? "Desconocido")
}.onDelete(perform: self.removeSelectedSubjects)
}
}
}
}