Exemplo reprodutível mínimo (Xcode 11.2 beta, isso funciona no 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()
}
}
O problema parece estar em colocar meu NavigationLinkinterior de um navigationBarItemsmodificador aninhado dentro de uma visualização SwiftUI cuja visualização raiz é a NavigationView. O relatório de falha indica que estou tentando acessar um controlador de exibição que não existe quando navego para frente Childe depois para Parent.
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'
*** First throw call stack:
Se eu colocasse isso NavigationLinkno corpo da visualização como a abaixo, funciona muito bem.
struct Parent: View {
var body: some View {
NavigationView {
NavigationLink(destination: Child(), label: { Text("Next") })
}
}
}
Isso é um bug do SwiftUI ou comportamento esperado?
EDIT: Eu abri um problema com a Apple no assistente de feedback com o ID FB7423964, caso alguém da Apple se preocupe em pesar :).
EDIT: meu ticket aberto no assistente de feedback indica que há mais de 10 problemas relatados semelhantes. Eles atualizaram a resolução com Resolution: Potential fix identified - For a future OS update. Dedos cruzados que a correção chega logo.
EDIT: Isso foi corrigido no iOS 13.3!
ContentView.swift. Farei uma edição na postagem, mas a falha só acontece quando você navega para frente e para trás.