EDIT: This has been fixed in iOS 13.3!
Minimal reproducible example (Xcode 11.2 beta, this works in 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()
}
}
The issue seems to lie in placing my NavigationLink
inside of a navigationBarItems
modifier that's nested inside of a SwiftUI view whose root view is a NavigationView
. The crash report indicates that I'm trying to pop to a view controller that doesn't exist when I navigate forward to Child
and then back to Parent
.
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'
*** First throw call stack:
If I were to instead place that NavigationLink
in the body of the view like the below, it works just fine.
struct Parent: View {
var body: some View {
NavigationView {
NavigationLink(destination: Child(), label: { Text("Next") })
}
}
}
Is this a SwiftUI bug or expected behavior?
EDIT: I've opened an issue with Apple in their feedback assistant with the ID FB7423964
in case anyone out there from Apple cares to weigh in :).
EDIT: My open ticket in the feedback assistant indicates there are 10+ similar reported issues. They've updated the resolution with Resolution: Potential fix identified - For a future OS update
. Fingers crossed that the fix lands soon.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…