Я хочу иметь простое приложение с отсортированным списком элементов. При щелчке по каждому элементу открывается подробный вид, где при нажатии другой кнопки обновляется поле элемента, которое должно перерисовать исходный список.
Представление списка задается с помощью:
import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) var context
@State private var itemName: String = ""
// get all data, sorted by date
@FetchRequest(
entity: Item.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Item.lastEdited, ascending: true)]
) var allItems: FetchedResults<Item>
var body: some View {
NavigationView {
List {
ForEach (allItems) { item in
NavigationLink(destination: DetailView(item: item).environment(\.managedObjectContext, self.context)) {
Text(item.name ?? "No name given")
} // nav link
}
}
}
}
, а подробное представление задается с помощью:
import SwiftUI
import CoreData
struct DetailView: View {
@Environment(\.managedObjectContext) var context
var item: FetchedResults<Item>.Element
var body: some View {
Button (action: {
self.updateDate(item: self.item)
}) {
Text("Press me!")
}
} // body
func updateDate(item: Item) {
item.lastEdited = Date()
} // func
} // DetailView
Нажатие кнопки «Нажмите меня» на подробном представлении заставляет обновление работать, и представление списка обновляется, но это происходит, когда я нажимаю кнопку:
- Отображается новый экран с подробным представлением
- Возвращается к представление списка
Почему (1) происходит? Как мне избежать этого?
У меня есть Item, определенный как Entity в моем xcdatamodeld