首页 > 解决方案 > 运行时的 swift_unexpectedError 到底是什么?

问题描述

我收到 assertionFailure 和 swift_unexpectedError。这是我的代码,它显示了崩溃:

if let audioDevice = AVCaptureDevice.default(for: .audio) {
    let audioIn = try! AVCaptureDeviceInput(device: audioDevice) /* Line of crash */
    if captureSession.canAddInput(audioIn) {
        captureSession.addInput(audioIn)
    }
}

这仅在我使用 Xcode 12 构建代码并更新应用程序后才发生。当我使用 Xcode 11 构建代码时,之前在同一行代码中没有发生崩溃。

  Crashed: com.capturePipeline.sessionQueue
 0  libswiftCore.dylib             0x1ae506730 _assertionFailure(_:_:file:line:flags:) + 492
 1  libswiftCore.dylib             0x1ae568d98 swift_unexpectedError + 436
 2  MyApp                       0x1047a70a4 CapturePipeline.setupVDO() + 4034 (CapturePipeline.swift:4034)
 3  MyApp                       0x10478c3f4 CapturePipeline.configureSession() + 1025 (CapturePipeline.swift:1025)
 4  MyApp                       0x1047bc5fc partial apply for closure #1 in CapturePipeline.setupSession() + 4338992636
 5  MyApp                       0x104721008 thunk for @escaping @callee_guaranteed () -> () + 4338356232 (<compiler-generated>:4338356232)

标签: iosswiftxcodexcode12

解决方案


AVCaptureDeviceInputcan throw的初始化,通过使用try!你假设什么都不会被抛出,否则会导致你的应用程序崩溃。

使用do/catch捕获错误并获取有关它的更多信息:

do {
    let audioIn = try AVCaptureDeviceInput(device: audioDevice)
} catch {
    debugPrint(error)
}

推荐阅读