Minimalny odtwarzalny przykład (Xcode 11.2 beta, działa w 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()
}
}
Problem polega na tym, że umieszczam moje NavigationLink
wnętrze navigationBarItems
modyfikatora zagnieżdżonego w widoku SwiftUI, którego widokiem głównym jest NavigationView
. Raport o awarii wskazuje, że próbuję przejść do kontrolera widoku, który nie istnieje, gdy nawiguję do przodu, Child
a następnie z powrotem do Parent
.
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'
*** First throw call stack:
Gdybym zamiast tego umieścił to NavigationLink
w treści widoku, jak poniżej, działa to dobrze.
struct Parent: View {
var body: some View {
NavigationView {
NavigationLink(destination: Child(), label: { Text("Next") })
}
}
}
Czy to błąd SwiftUI lub oczekiwane zachowanie?
EDYCJA: Otworzyłem problem z Apple w ich asystencie zwrotnym z identyfikatorem FB7423964
na wypadek, gdyby ktokolwiek z Apple miał ochotę ważyć :).
EDYCJA: Mój otwarty bilet w asystencie opinii wskazuje, że zgłoszono ponad 10 podobnych problemów. Zaktualizowali rozdzielczość o Resolution: Potential fix identified - For a future OS update
. Trzymałem kciuki, że ta niedługo ląduje.
EDYCJA: Naprawiono to w iOS 13.3!
ContentView.swift
. Zrobię edycję wpisu, ale awaria zdarza się tylko wtedy, gdy nawigujesz do przodu, a następnie do tyłu.