Contoh minimal yang dapat direproduksi (Xcode 11.2 beta, ini berfungsi di 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()
}
}
Masalahnya tampaknya terletak pada menempatkan NavigationLinkbagian dalam saya dari navigationBarItemspengubah yang bersarang di dalam tampilan SwiftUI yang tampilan root-nya adalah a NavigationView. Laporan kerusakan menunjukkan bahwa saya mencoba untuk pop ke controller tampilan yang tidak ada ketika saya menavigasi ke depan Childdan kemudian kembali ke Parent.
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'
*** First throw call stack:
Jika saya sebaliknya menempatkan itu NavigationLinkdi tubuh tampilan seperti di bawah ini, itu berfungsi dengan baik.
struct Parent: View {
var body: some View {
NavigationView {
NavigationLink(destination: Child(), label: { Text("Next") })
}
}
}
Apakah ini bug SwiftUI atau perilaku yang diharapkan?
EDIT: Saya telah membuka masalah dengan Apple dalam asisten umpan balik mereka dengan ID FB7423964jika ada orang di luar sana dari Apple yang peduli untuk menimbang :).
EDIT: Tiket terbuka saya di asisten umpan balik menunjukkan ada 10+ masalah yang dilaporkan serupa. Mereka telah memperbarui resolusi dengan Resolution: Potential fix identified - For a future OS update. Jari-jari bahwa perbaikan tanah segera.
EDIT: Ini telah diperbaiki di iOS 13.3!
ContentView.swift. Saya akan mengedit posting, tetapi crash hanya terjadi ketika Anda menavigasi ke depan dan kemudian kembali.