无法捕获 NSStoryboard.instantiateController(withIdentifier:

Can't catch error thrown by NSStoryboard.instantiateController(withIdentifier:

我有如下代码:

if let vc = NSStoryboard.main?.instantiateController(withIdentifier: someIdentifier) as? Self{
    return vc
}else{
    //handle error case
    return nil
}

并且当它使用我的情节提要中找不到的标识符运行时,它不会转到其他情况,而是将错误打印到控制台并立即 returns(不会崩溃)。因为它的行为非常像抛出错误,所以我尝试用这样的 do-catch 包围它:

do{
   if let vc = try NSStoryboard.main?.instantiateController(withIdentifier: someIdentifier) as? Self{
       return vc
   }
}catch{
   //handle error
}

但这给了我警告,该方法不会抛出错误,因此永远不会到达 catch 块。我 运行 无论如何,果然没有到达 catch 块。它反而将错误打印到控制台,并且似乎立即 return。

有人可以向我解释这里发生了什么以及如何 'catch' 这个错误吗?

注意:为了澄清起见,我理解为什么视图控制器的实例化失败,但我想动态处理该错误情况。这就是我遇到的问题。

如果您在 XCode 中启用 "All Objective-C Exceptions" 断点,您会看到它抛出一个 Objective C 异常并且我上次检查时没有安全的方法从 [=17= 中恢复] Swift.

中的异常