You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI NavigationLink跳转异常求助(视障信息分享应用开发)

问题:特定分类NavigationLink点击后视图立即返回,控制台提示SwiftUI Bug

我正在为视障群体开发一款信息分享应用,目前遇到一个棘手问题——点击某特定分类的NavigationLink时,视图会立即返回,控制台提示:SwiftUI encountered an issue when pushing a NavigationLink. Please file a bug,其他分类无此异常。

相关代码

CategoryView 代码

struct CategoryView: View {
    
    @EnvironmentObject var blindzeln: BLINDzeln
    @State private var showingAlertNoData = false
    @State private var showingAlertNoInternet = false
    
    var body: some View {
        VStack(spacing: 100){
            NavigationView {
                List(blindzeln.listOfCategories.uniqued(), id: \.self) { item in
                    if blindzeln.listOfCategories[0] != " " {
                        NavigationLink(destination: CategoryDetailView(categoryTitle: item, catID: blindzeln.findCatID(item: item))) {
                            
                            VStack{
                                
                                HStack{
                                    VStack(alignment: .leading) {
                                        Text(item)
                                            .font(.system(size: 100))
                                            .lineLimit(1)
                                            .minimumScaleFactor(0.1)
                                            .foregroundColor(.primary)
                                    }
                                }
                                .padding()
                                BigDivider()
                            }
                        }.listRowSeparatorTint(.primary)
                            .listRowSeparator(.hidden)
                    }
                }
                .listStyle(.inset)
                .refreshable {
                    if !cellMonitor.isReachable {showingAlertNoInternet = true}
                    await blindzeln.updateAllData()
                }
                .navigationTitle("Kategorien")
                .navigationBarTitleDisplayMode(.inline)
                .toolbar(content: {
                    ToolbarItem(placement: .principal, content: {
                        Text("Kategorien")
                    })})
            }
            .alert("Keine Daten vorhanden! \n Nach unten ziehen zum aktualisieren.", isPresented: $showingAlertNoData) {
                Button("OK", role: .cancel) { }
            }
            .alert("Du scheinst offline zu sein. Bitte eine Verbindung zum Internet herstellen!", isPresented: $showingAlertNoInternet) {
                Button("OK", role: .cancel) { }
            }
            .task() {
                if blindzeln.listOfCategories[0] == " " {
                    // print ("leer")
                    await blindzeln.loadCategoriesFromFile()}
                //   else {print("ANzahl KAtegorien \(blindzeln.listOfCategories.count)")}
                //  await blindzeln.loadData()
                await blindzeln.updateAllData()
                if blindzeln.listOfCategories.count == 0 {showingAlertNoData = true
                }
            }
        }
        .onAppear(){
            blindzeln.listOfCategoriesFiles = defaults.object(forKey:"SavedCategoryFiles") as? [String] ?? ["categories"]
        }
        
        
    }
}

CategoryDetailView 代码

struct CategoryDetailView: View {
    
    @EnvironmentObject var blindzeln: BLINDzeln
    @AppStorage ("version") var version: Int = 0
    @State var shouldRefresh: Bool = false
    @State private var searchText = ""
    let categoryTitle: String
    let catID: Int
    
    var body: some View {
        VStack{
            List {
                ForEach(blindzeln.results.filter { searchText.isEmpty || ($0.title.localizedCaseInsensitiveContains(searchText) || $0.textBody.localizedCaseInsensitiveContains(searchText)) }, id: \.entryID){ item in
                  
                    switch item.mediaType{
                    case "image":
                        NavigationLink(destination: ItemDetailViewImage(item: item, isFavorite: false, catID: catID)) {DisplayEntryView(item: item)}.listRowSeparatorTint(.primary).listRowSeparator(.hidden)
                        
                    case "speech":
                        NavigationLink(destination: ItemDetailViewText2Speech(item: item, isFavorite: false, catID: catID)) {DisplayEntryView(item: item)}.listRowSeparatorTint(.primary).listRowSeparator(.hidden)
                    case "vcf":
                        NavigationLink(destination: ItemDetailViewVcf(item: item, isFavorite: false, catID: catID)) {DisplayEntryView(item: item)}.listRowSeparatorTint(.primary).listRowSeparator(.hidden)
                    case "cal":
                        NavigationLink(destination: ItemDetailViewWithCalendar(item: item, isFavorite: false, catID: catID)) {DisplayEntryView(item: item)}.listRowSeparatorTint(.primary).listRowSeparator(.hidden)
                    
                    case "text":
                        NavigationLink(destination: ItemDetailViewText(item: item, isFavorite: false, catID: catID)) {DisplayEntryView(item: item)}.listRowSeparatorTint(.primary).listRowSeparator(.hidden)
                    case "audio":
                        NavigationLink(destination: ItemDetailViewMP3(item: item, isFavorite: false, catID: catID)) {DisplayEntryView(item: item)}.listRowSeparatorTint(.primary).listRowSeparator(.hidden)
                        
                    default:
                        NavigationLink(destination: ItemDetailViewStandard(item: item, isFavorite: false, catID: catID)) {DisplayEntryView(item: item)}.listRowSeparatorTint(.primary).listRowSeparator(.hidden)
                    }
                      
                }
            }
            .searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always), prompt: "") {}
            
            .navigationTitle(categoryTitle)
            .navigationBarTitleDisplayMode(.inline)
            .listStyle(.inset)
        }
        .task(){
            await blindzeln.decodeCategoryData(showCategory: categoryTitle)
        }
       
    }
    
}

恳请各位提供解决思路,感谢!


内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:18:20