无法捕获NSStoryboard.instantiateController(withIdentifier:

问题描述 投票:0回答:1

我有如下代码:

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块。无论如何,我都运行它,并确保没有达到捕获块。它改为将错误打印到控制台,并且似乎立即返回。

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

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

swift macos cocoa appkit
1个回答
0
投票

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

Catching NSException in Swift

© www.soinside.com 2019 - 2024. All rights reserved.