最小限の再現可能な例(Xcode 11.2ベータ、これは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()
}
}
問題は、ルートビューがであるSwiftUIビュー内にネストされてNavigationLink
いるnavigationBarItems
モディファイアの内側に配置することにあるようNavigationView
です。クラッシュレポートは、に移動してChild
からに戻ったときに、存在しないView Controllerにポップしようとしていることを示していParent
ます。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'
*** First throw call stack:
代わりにNavigationLink
、以下のようにビューの本文に配置すると、問題なく動作します。
struct Parent: View {
var body: some View {
NavigationView {
NavigationLink(destination: Child(), label: { Text("Next") })
}
}
}
これはSwiftUIのバグですか、それとも予想される動作ですか?
編集:私はフィードバックアシスタントでAppleの問題をIDで公開しました FB7423964
をからの誰かがそこに量り込みたいている場合に備えて:)。
編集:フィードバックアシスタントの未解決のチケットは、10件以上の同様の報告された問題があることを示しています。彼らは解像度を更新しましたResolution: Potential fix identified - For a future OS update
。修正はすぐに着陸することを指が交差しました。
編集:これはiOS 13.3で修正されています!
ContentView.swift
。投稿を編集しますが、クラッシュが発生するのは、前に移動してから戻った場合のみです。