Я работаю над проектом, чтобы облегчить жизнь учителей, когда дело доходит до отметок, процентов, записей, профилей учеников ... Пока все хорошо, за исключением того, что я не смог правильно удалить базовые данные с помощью '.onDelete «потому что я выставляю предметы по группам вначале , затем показывают себя, как изображение, связанное здесь .
Я пытался применить« .onDelete »к внешний 'ForEach', но его поведение одинаково ошибочно c, и я не могу понять, как передать ему правильный IndexSet.
Список вещей, которые необходимо уточнить (надеюсь):
- 'Subject' - моя единственная сущность CoreData.
- 'readableGrade' - простая функция, которая возвращает String из значения Int.
Я думаю, что .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)
}
}
}
}