似乎从Objective-C代码中抛出了NSException。您不能直接从Swift捕获NSExceptions,但是有一种方法可以在Objective-C和Swift之间建立桥梁。这样,您可以将NSException转换为Swift可以理解的内容(例如,NSError)。
这很可能是我对敏捷一无所知,但我感到困惑。
我有以下(简化)代码-请注意,由于它(通常)按预期运行,因此我从中抽了很多东西:
engine = AVAudioEngine() //engine being a class variable AVAudioUnit.instantiate(with: mixerDesc, options: [.loadOutOfProcess], completionHandler: {(audioUnit, auError) in //configure matrix mixer self.matrixMixer = au engine.attach(au) print("make connections") engine.connect(engine.inputNode, to: au, format: inputFormat) engine.connect(au, to: engine.mainMixerNode, format: inputFormat) print("connections done") try! engine.start() }
此代码在99%的时间内有效,但是在某些情况下(主要是在默认输入/输出设备更改时),在建立连接时会产生错误。我不明白的是,该错误导致函数在发生错误时(建立连接时)退出,但不会导致应用程序终止-我假设这是因为错误是只是杀死那个线程。
有什么方法可以捕获该错误?我尝试将defer {}
添加到该函数的开头,但这也不被调用。这令人沮丧,因为这意味着应用程序不同步,我不清楚如何捕获它。
仅供参考,抛出的错误是:
2020-05-31 22:33:22.219189+0100 StageSound[20887:289670] [General] required condition is false: IsFormatSampleRateAndChannelCountValid(hwFormat) 2020-05-31 22:33:22.221812+0100 StageSound[20887:289670] [General] ( 0 CoreFoundation 0x00007fff332f1be7 __exceptionPreprocess + 250 1 libobjc.A.dylib 0x00007fff6c0c95bf objc_exception_throw + 48 2 CoreFoundation 0x00007fff3331ad98
并且崩溃日志继续。.>
这很可能使我对快速不了解,但是我感到困惑。我有以下(简化)代码-请注意,由于它(通常)按预期运行,因此我从中抽了很多东西:engine = ...] >
似乎从Objective-C代码中抛出了NSException。您不能直接从Swift捕获NSExceptions,但是有一种方法可以在Objective-C和Swift之间建立桥梁。这样,您可以将NSException转换为Swift可以理解的内容(例如,NSError)。
有关此桥接的详细信息,请参阅:https://stackoverflow.com/a/36454808
似乎从Objective-C代码中抛出了NSException。您不能直接从Swift捕获NSExceptions,但是有一种方法可以在Objective-C和Swift之间建立桥梁。这样,您可以将NSException转换为Swift可以理解的内容(例如,NSError)。