无法捕获 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.
中的异常
我有如下代码:
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.
中的异常