Ejemplo reproducible mínimo (Xcode 11.2 beta, esto funciona en 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()
}
}
El problema parece radicar en colocar mi NavigationLinkinterior de un navigationBarItemsmodificador que está anidado dentro de una vista SwiftUI cuya vista raíz es a NavigationView. El informe de bloqueo indica que estoy intentando abrir un controlador de vista que no existe cuando navego hacia adelante Childy luego hacia atrás 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 tuviera que colocar eso NavigationLinken el cuerpo de la vista como el siguiente, funciona bien.
struct Parent: View {
var body: some View {
NavigationView {
NavigationLink(destination: Child(), label: { Text("Next") })
}
}
}
¿Es esto un error de SwiftUI o un comportamiento esperado?
EDITAR: he abierto un problema con Apple en su asistente de comentarios con la ID FB7423964en caso de que a alguien de Apple le importe pesar :).
EDITAR: Mi boleto abierto en el asistente de comentarios indica que hay más de 10 problemas similares reportados. Han actualizado la resolución con Resolution: Potential fix identified - For a future OS update. Los dedos cruzaron que la solución aterriza pronto.
EDITAR: ¡Esto se ha solucionado en iOS 13.3!
ContentView.swift. Haré una edición en la publicación, pero el bloqueo solo ocurre cuando navegas hacia adelante y luego hacia atrás.