Пункт назначения навигации Необязательно, попытка обновления несколько раз за кадр.

1
6

Я работаю над Match Prediction, извлекая данные из API, и получаю эту ошибку: Navigation destination Optional<TeamView> attempting to update multiple times per frame.

Я пробовал инкапсулировать MatchPredictionsView в NavigationLink, но это не соответствует схеме пользовательского интерфейса для PlayerCards. Я работал с swiftUI раньше и никогда не видел этой ошибки, так что, если кто-то может дать отзыв о том, как не сталкиваться с этой проблемой в будущем.

Вот мой code:

PlayerCard:

import SwiftUI

struct TeamView: View {
    @State var team: Team
    @State private var teamImage: UIImage? = nil
    @State var displayPredictions: Bool = false
    
    var body: some View {
        NavigationView {
            ZStack {
                VStack {
                    // Header Content
                    if let teamImage = teamImage {
                        Image(uiImage: teamImage)
                            .resizable()
                            .scaledToFit()
                            .padding()
                    } else {
                        // Fallback image or placeholder if the image couldn't be loaded
                        Image(systemName: "photo")
                            .resizable()
                            .aspectRatio(contentMode: .fit)
                            .foregroundColor(.gray)
                            .padding()
                    }
                    Spacer()
                }
                
                // Rest of content
                ScrollView {
                    Spacer(minLength: 350)
                    ZStack {
                        RoundedRectangle(cornerRadius: 25.0)
                            .foregroundStyle(.white)
                            .shadow(radius: 7.5, y: -10)
                        VStack {
                            // Team Name
                            Text(team.name)
                                .font(.title)
                                .padding()
                            // Manager
                            Text("Manager: \(team.coach.name)")
                                
                            // Roster
                            Text("Roster")
                                .font(.title3)
                            ForEach(team.squad, id: \.id) { player in
                                PlayerCard(player: player)
                                    .padding()
                            }
                            
                            // Match Predictions
                            NavigationLink(destination: MatchPredictionsView(team: team)) {
                                ZStack {
                                    RoundedRectangle(cornerRadius: 25.0)
                                        .foregroundStyle(.green)
                                        .frame(width: 350, height: 100)
                                    
                                    Text("Predict Future Matches")
                                        .foregroundStyle(.white)
                                        .font(.title2)
                                }
                            }
                            .padding()
                        }
                    }
                }
            }
            .onAppear {
                loadImage()
            }
        }
    }
    
    func loadImage() {
        guard let url = URL(string: team.crestURL) else { return }
        URLSession.shared.dataTask(with: url) { data, response, error in
            if let data = data, let image = UIImage(data: data) {
                DispatchQueue.main.async {
                    self.teamImage = image
                }
            }
        }.resume()
    }
}

import SwiftUI

struct PlayerCard: View {
    var player: Player
    @State var positionAbbrevation: String = ""
    
    var body: some View {
        ZStack {
            RoundedRectangle(cornerRadius: 25.0)
                .foregroundStyle(.white)
                .shadow(radius: 10)
            HStack {
                Text(positionAbbrevation)
                Text(player.name)
            }
        }
        .frame(width: 350, height: 100)
        .onAppear {
            positionAbbrevation = positionAbbreviation(position: player.position)
        }
    }
    
    func positionAbbreviation(position: String) -> String {
        switch position {
        case "Goalkeeper":
            return "GK"
        case "Defence":
            return "D"
        case "Right-Back":
            return "RB"
        case "Centre-Back":
            return "CB"
        case "Left-Back":
            return "LB"
        case "Midfield":
            return "M"
        case "Attacking Midfield":
            return "CAM"
        case "Left Winger":
            return "LW"
        case "Right Winger":
            return "RW"
        case "Offence":
            return "ST"
        default:
            return position
        }
    }
}
Модест
Вопрос задан8 марта 2024 г.

1 Ответ

2
Яков
Ответ получен9 сентября 2024 г.

Ваш ответ

Загрузить файл.