我正在为相关条目数组做导航堆栈
var body: some View {
NavigationStack(path: $navPath){
VStack {
List(Array(plant.event as! Set<Event>), id: \.self) { eventInList in
NavigationLink(destination: EventPageView(event: eventInList)) {
EventCardRowView(event: eventInList)
}.listRowBackground(Color("ChampagnePink"))
}.navigationDestination(for: Event.self) { event in
EventPageView(event: event)
}
}
}
}
这一个不起作用——所有事件都被一次推送到导航堆栈——如果我点击一个事件,我就会落入所有事件的链条中。
虽然它完全正确,当我现在用相关实体做它时,但是作为单独获取的数组:
NavigationStack(path: $navPath){
VStack {
List(events, id: \.date) { eventInList in
NavigationLink(destination: EventPageView(event: eventInList)) {
EventCardRowView(event: eventInList)
}.listRowBackground(Color("ChampagnePink"))
}.navigationDestination(for: Event.self) { event in
EventPageView(event: event)
}
}
}
怎么了,一对多关系输入的正确方法是什么?
UPD:我的问题不同于CoreData一对多关系。 NSSet 属性问题
我在获取和查看列表时没有问题 - 我获取相关的 enries 数组并将其很好地列出,但是单击列表项无法正常工作 - 整个数组一次被推入堆栈 - 这意味着如果我单击事件 3 后退按钮将带我参加活动 2,然后是 1
看来您对 NavigationStack 和 NavigationLink 的配置可能是问题的原因。使用一对多连接时,确保每个 NavigationLink 只负责导航到一个事件,而不是所有事件。
var body: some View {
NavigationStack(path: $navPath){
VStack {
List(Array(plant.event as! Set<Event>), id: \.self) { eventInList in
NavigationLink(destination: EventPageView(event: eventInList)) {
EventCardRowView(event: eventInList)
}.listRowBackground(Color("ChampagnePink"))
}
}.navigationDestination(for: Event.self) { event in
EventPageView(event: event)
}
}
}
可能有用