我正在努力寻找一种非常简单的模式,我希望朝着正确的方向发展。简而言之:我想从主视图(列表)导航到详细信息视图(列表),在该视图中,在主列表中点击的行会导致获取核心数据以填充详细信息列表。例如:
struct ContentView: View {
let makes = ["GMC", "Ford", "Chevy"]
var body: some View {
NavigationView {
List(self.makes, id: \.self) { make in
NavigationLink(destination: DetailView()) {
Text(make)
} //NavigationLink
} //List
} //NavigationView
} //body
} //ContentView
因此,如果用户点击标有“ Chevy”的行,我想执行核心数据获取,返回所有带有make ==“ Chevy”的Vehicle对象,然后使用这些Vehicle填充详细视图列表。我知道如何使用必要的谓词执行获取,但是我无法弄清楚何时点击行时何时进行获取,或者如何将获取结果获取到详细信息视图。
编辑:为了明确起见,我想避免使用ContentView预先提取所有Vehicles,然后仅根据所选品牌对其进行过滤的模式。相反,我希望在用户点击一行后动态进行获取。
答案 0 :(得分:1)
我认为最好的方法是让DetailView
进行提取,只需将选定的行传递到DetailView
并使其完成工作,您可以将提取内容放入{{ 1}} init或更好地将其放置在模型的init中。
但是,如果没有与所选行匹配的数据,也许您不想执行导航(在DetailView中显示一个空列表会有些丑陋),在这种情况下,您必须将提取内容放入MasterView中建模并在按下一行时调用它,请参阅我今天早些时候在这里https://stackoverflow.com/a/58723514/10208552给出的答案,基本上,您将点击一个按钮,该按钮将触发获取操作并触发导航
答案 1 :(得分:0)
通过简单的struct参数将make传递到第二个视图,
NavigationLink(destination: DetailView(make: make))
您的DetailView
仅需要该make
参数:
struct DetailView: some View {
var make: String
}
然后使用谓词提取请求,如下所示:
@FetchRequest(
entity: Vehicle.entity(),
sortDescriptors: [
NSSortDescriptor(key: "model", ascending: true),
],
predicate: NSPredicate(format: "make == %@", self.make)
) var vehicles: FetchedResults<Vehicle>
请注意,此代码未经测试,但这可以使您走上正确的道路。