최소 재현 가능한 예 (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
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 버그입니까 아니면 예상되는 동작입니까?
편집 : FB7423964
Apple의 외부 담당자가 무게를 측정 해야하는 경우를 대비 하여 ID와 함께 피드백 지원에서 Apple과 관련된 문제를 열었습니다 . :)
편집 : 피드백 도우미의 열린 티켓은 10 가지 이상의 유사한보고 된 문제가 있음을 나타냅니다. 그들은로 해상도를 업데이트했습니다 Resolution: Potential fix identified - For a future OS update
. 손가락이 교차하여 수정이 곧 착륙했습니다.
편집 : 이것은 iOS 13.3에서 수정되었습니다!
ContentView.swift
. 게시물을 수정하겠습니다. 크래시는 앞뒤로 탐색 할 때만 발생합니다.