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 NavigationLink
interior de un navigationBarItems
modificador 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 Child
y 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 NavigationLink
en 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 FB7423964
en 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.