9

クラッシュはこんな感じ

ここに画像の説明を入力

そのため、UIKit ラインでランダムにクラッシュします

UIKitCore
-[UIViewController _ancestorViewControllerOfClass:allowModalParent:] + 44

デフォルトのSwiftUIナビゲーションスタックにViewがあります:

struct MyView: View {
  @EnvironmentObject var viewModel: MyViewModel
  @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

var body: some View {
    ZStack {
      ......
    }
    .onAppear {
      self.viewModel
        .onViewAppear(presentationMode: self.presentationMode)
    }
  }
}

final class MyViewModel {
  var presentationMode: Binding<PresentationMode>?

  func onViewAppear(presentationMode: Binding<PresentationMode>) {
    self.presentationMode = presentationMode
  }

  func hide() {
    presentationMode?.wrappedValue.dismiss() // crashes after calling this
  }
}

したがって、MyView をナビゲーション スタックに次のようにプッシュします。

NavigationLink(
      destination: MyView()
    ) {
      Image(systemName: "plus.circle")
        .font(.title)
    }

そして、ユーザーが数秒後に MyView のボタンを押した後、hide()MyViewModel を呼び出します。ほぼ常に動作しますが、5 ~ 10% の場合にクラッシュします。

4

1 に答える 1