Ví dụ tái tạo tối thiểu (Xcode 11.2 beta, điều này hoạt động trong 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()
}
}
Vấn đề dường như nằm ở việc đặt NavigationLink
bên trong của tôi một công cụ navigationBarItems
sửa đổi được lồng bên trong chế độ xem SwiftUI có chế độ xem gốc là a NavigationView
. Báo cáo sự cố chỉ ra rằng tôi đang cố gắng bật một bộ điều khiển xem không tồn tại khi tôi điều hướng tới Child
và sau đó quay lại Parent
.
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'
*** First throw call stack:
Nếu tôi thay vào đó đặt nó NavigationLink
trong phần thân của khung nhìn như bên dưới, thì nó hoạt động tốt.
struct Parent: View {
var body: some View {
NavigationView {
NavigationLink(destination: Child(), label: { Text("Next") })
}
}
}
Đây có phải là một lỗi SwiftUI hoặc hành vi dự kiến?
EDIT: Tôi đã mở một vấn đề với Apple trong trợ lý phản hồi của họ với ID FB7423964
trong trường hợp có ai đó từ Apple quan tâm đến việc cân nhắc :).
EDIT: Vé mở của tôi trong trợ lý phản hồi cho biết có hơn 10 vấn đề được báo cáo tương tự. Họ đã cập nhật độ phân giải với Resolution: Potential fix identified - For a future OS update
. Ngón tay vượt qua mà sửa đất sớm.
EDIT: Điều này đã được sửa trong iOS 13.3!
ContentView.swift
. Tôi sẽ chỉnh sửa bài viết, nhưng sự cố chỉ xảy ra khi bạn điều hướng tiến lên rồi quay lại.