【发布时间】:2020-09-19 04:55:36
【问题描述】:
我编写了一个显示学生列表的应用程序。为此,我使用了NavigationLink 的List。学生按其属性questionAskedClass 之一排序,这是一个整数。所有这些信息都存储在 CoreData 中。
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(entity: Student.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Student.questionAskedClass,
ascending: true)])
var students: FetchedResults<Student>
var body: some View {
NavigationView {
List {
ForEach(students) {student in
NavigationLink(destination: StudentView(student: student)) {
HStack {
VStack(alignment: .leading) {
Text("\(student.firstName)").font(.headline).foregroundColor(Color.black)
Text("\(student.lastName)").font(.headline).foregroundColor(Color.gray)
}
}
}
}
}
}
}
当我按下学生的姓名时,我会切换到一个名为StudentView 的新视图,在该视图中我可以获取有关该学生的更多信息以及可以在其中更新属性questionAskedClass
struct StudentView: View {
@Environment(\.managedObjectContext) var managedObjectContext
func askQuestion() {
self.managedObjectContext.performAndWait {
self.student.questionAskedClass += 1
try? self.managedObjectContext.save()
}
}
}
不幸的是,当我更改该属性时,初始列表的顺序发生了变化,我被带离了StudentView。框架似乎感觉到列表需要重新排序。但我只希望在返回列表时重新排序此列表。当我更改 questionAskedClass 的值时不会立即发生。
我可以做些什么来缓解这个问题?
感谢您的帮助。
【问题讨论】: