【问题标题】:SwiftUI "Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)" when making popSwiftUI“线程1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)”弹出时
【发布时间】:2020-10-06 04:53:48
【问题描述】:

晚上好,

在这里,我想讨论一种奇怪的情况。我在 SwiftUI 中制作应用程序,并且从模态导航开始出现问题。

这里是我的代码示例:

类别列表视图

struct CategoriesListView: View {
@ObservedObject var viewModel: CategoriesListViewModel
@State private var searchedText = ""
@State private var showCancelButton: Bool = false
@GestureState private var dragOffset = CGSize.zero

var body: some View {
    GeometryReader { [weak viewModel] geometry in
        NavigationView {
            ZStack(alignment: .leading) {
                GeometryReader { geo in
                    Image("bg_shape")
                        .frame(width: geo.size.width, height: geo.size.height)
                        .position(x:  geo.size.width / 2, y: geo.size.height / 4)
                }
                self.content(viewModel: viewModel)
            }.navigationBarTitle("Categories", displayMode: .automatic)
                .animation(.easeOut(duration: 0.3))
                .navigationBarHidden(self.showCancelButton)
                .navigationBarItems(leading: Button(action: {
                    viewModel?.dismiss.send(())
                }) {
                    Image("button_arrow")
                },trailing: Image("logo"))
                .gesture(DragGesture().updating(self.$dragOffset, body: { (value, state, transaction) in
                    if(value.startLocation.x < 20 && value.translation.width > 100) {
                        viewModel?.dismiss.send(())
                    }
                }))

        }
    }
}

CategoryProductsListView

struct CategoryProductsList: View {
@Environment(\.viewController) var viewRepresentative
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@ObservedObject var viewModel: CategoryProductListViewModel
@State private var searchedText = ""
@State private var showCancelButton: Bool = false
@State private var showModal: Bool = false
@GestureState private var dragOffset = CGSize.zero

var body: some View {
    GeometryReader { [weak viewModel] geometry in
        ZStack(alignment: .leading) {
            GeometryReader { geo in
                Image("bg_shape")
                    .frame(width: geo.size.width, height: geo.size.height)
                    .position(x: geo.size.width / 2, y: geo.size.height / 4)
            }
            self.content(viewModel: viewModel)
        }.navigationBarTitle("Products", displayMode: .automatic)
            .navigationBarHidden(self.showCancelButton)
            .navigationBarBackButtonHidden(true)
            .navigationBarItems(leading: Button(action: {
                UITableView.appearance().rowHeight = UITableView.automaticDimension
                self.presentationMode.wrappedValue.dismiss()
            }) {
                Image("button_arrow")
            },trailing: Image("logo"))
            .gesture(DragGesture().updating(self.$dragOffset, body: { (value, state, transaction) in
                if(value.startLocation.x < 20 && value.translation.width > 100) {
                    UITableView.appearance().rowHeight = UITableView.automaticDimension
                    self.presentationMode.wrappedValue.dismiss()
                }
            }))
    }.blur(radius: self.showModal ? 4 : 0)
}

这是我的堆栈导航示例:

CategoriesListView -> CategoryProductsListView -> ProductDetailView

在 ProductDetaliView 上我有按钮,它关闭屏幕。

 Button(action: {
     self.presentationMode.wrappedValue.dismiss()}) {
        Image("button_close")
 }.buttonStyle(PlainButtonStyle()))

情况一:

当我以模态方式呈现 ProductDetailView,并使用关闭按钮,然后返回 CategoriesListView,一切正常。

情况2: 当我以 ProductDetailView 模式呈现时,并使用向下滑动关闭屏幕,然后我返回 CategoriesListView,它会在没有任何登录屏幕的情况下崩溃应用程序。

这似乎是 Swift UI 上的一个错误,但我没有找到任何有关它的信息。如果您知道它可能是什么,请提供帮助。

祝你有美好的一天!

编辑:

几个小时后,我找到了解决方案,问题在于改变 UINavigationBar 的外观。

结束题

【问题讨论】:

  • Thread 1: EXC_BAD_INSTRUCTION 异常是 99,99% 的开发人员错误。设置异常断点以获取更多信息。
  • @vadian 在我在这里写问题之前我先做了,什么也没做。我选择了所有例外,什么都没有:(
  • 如果问题得到解决,请给出解决方案作为答案。不要将答案嵌入问题中。
  • 帮助进一步解决该错误,单击出现异常的线程并在控制台底部键入$arg1,这应该会输出实际错误。

标签: ios swift swiftui


【解决方案1】:

几个小时后,我找到了解决方案,问题在于改变 UINavigationBar 的外观。

结束题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2019-12-09
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多