Exemple reproductible minimal (Xcode 11.2 beta, cela fonctionne dans Xcode 11.1):
struct Parent: View {
var body: some View {
NavigationView {
Text("Hello World")
.navigationBarItems(
trailing: NavigationLink(destination: Child(), label: { Text("Next") })
)
}
}
}
struct Child: View {
@Environment(\.presentationMode) var presentation
var body: some View {
Text("Hello, World!")
.navigationBarItems(
leading: Button(
action: {
self.presentation.wrappedValue.dismiss()
},
label: { Text("Back") }
)
)
}
}
struct ContentView: View {
var body: some View {
Parent()
}
}
Le problème semble résider dans le fait de placer mon NavigationLink
intérieur d'un navigationBarItems
modificateur imbriqué dans une vue SwiftUI dont la vue racine est a NavigationView
. Le rapport d'erreur indique que j'essaie d'accéder à un contrôleur de vue qui n'existe pas lorsque je navigue vers Child
puis vers Parent
.
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'
*** First throw call stack:
Si je devais plutôt placer cela NavigationLink
dans le corps de la vue comme ci-dessous, cela fonctionne très bien.
struct Parent: View {
var body: some View {
NavigationView {
NavigationLink(destination: Child(), label: { Text("Next") })
}
}
}
S'agit-il d'un bogue SwiftUI ou d'un comportement attendu?
EDIT: J'ai ouvert un problème avec Apple dans leur assistant de rétroaction avec l'ID FB7423964
au cas où quelqu'un d'Apple se soucierait de peser :).
EDIT: Mon ticket ouvert dans l'assistant de commentaires indique qu'il y a plus de 10 problèmes similaires signalés. Ils ont mis à jour la résolution avec Resolution: Potential fix identified - For a future OS update
. Les doigts croisés que le correctif atterrit bientôt.
EDIT: Cela a été corrigé dans iOS 13.3!
ContentView.swift
. Je vais modifier le message, mais le plantage ne se produit que lorsque vous naviguez vers l'avant puis vers l'arrière.