Я работаю над 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 г.