带有关系数组的 NavigationStack

问题描述 投票:0回答:1

我正在为相关条目数组做导航堆栈

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

swift swiftui relation swiftui-navigationstack
1个回答
0
投票

看来您对 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)
        }
    }
}

可能有用

© www.soinside.com 2019 - 2024. All rights reserved.