我想要一个简单的应用程序,其中包含项目的排序列表。单击每个项目都会进入详细信息视图,在该视图中单击另一个按钮将更新项目的字段,该字段应重新绘制原始列表。
列表视图由以下方式提供:
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)发生?如何避免这种情况?
我在xcdatamodeld中将Item定义为实体