【问题标题】:Can't catch error thrown by NSStoryboard.instantiateController(withIdentifier: [duplicate]无法捕获 NSStoryboard.instantiateController 引发的错误(withIdentifier:[重复]
【发布时间】:2020-06-17 15:20:13
【问题描述】:

我有如下代码:

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

当它使用我的故事板中找不到的标识符运行时,它不会转到 else 情况,而是将错误打印到控制台并立即返回(不会崩溃)。因为它的行为很像抛出错误,所以我尝试用这样的 do-catch 包围它:

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

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

有人可以向我解释这里发生了什么以及如何“捕捉”这个错误吗?

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

【问题讨论】:

  • 您不应尝试以编程方式捕获此类错误。这基本上是一个致命错误。如果你试图加载一个无效的控制器,这是一个编程错误。

标签: swift macos cocoa appkit


【解决方案1】:

如果您在 XCode 中启用“所有 Objective-C 异常”断点,您会看到它抛出了一个 Objective C 异常,而我上次检查时,没有安全的方法可以从 Swift 中的 Objective-C 异常中恢复。

Catching NSException in Swift

【讨论】:

    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2020-06-23
    • 1970-01-01
    • 2021-03-28
    相关资源
    最近更新 更多