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 NavigationLink
interior de um navigationBarItems
modificador 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 Child
e 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 NavigationLink
no 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.