【发布时间】:2017-01-11 19:48:09
【问题描述】:
我正在尝试捕获 Swift3 程序中的所有 NSExceptions - 一直在关注 this Stack Overflow answer
所以我有这个:
override func viewDidLoad() {
super.viewDidLoad()
NSSetUncaughtExceptionHandler { exception in
print("EXCEPTION CAUGHT HERE....")
print(exception)
print(exception.callStackSymbols)
}
// force NSException
let array = NSArray()
_ = array.object(at: 99)
}
但没有调用异常 相反,我得到了这个输出:
2016-09-04 14:49:14.252 catchAllErrorsTest[8126:164827] 设置失败 (contentViewController) 用户在 (NSWindow) 上定义的检查属性: *** -[__NSArray0 objectAtIndex:]:空 NSArray 的索引 99 超出范围
我也尝试将异常放入 AppDelegate(在 applicationWillFinishLaunching 和 applicationDidFinishLaunching 中),但结果相同
【问题讨论】:
-
您分享的链接明确指出它没有捕获任何 Swift 2 错误
(from throw)或 Swift 运行时错误,例如访问数组的第 99 个索引[1, 2, 3]。 -
感谢@ozgur - 我同意链接声明它不会捕获 Swift 错误,但它似乎清楚地表明引用的代码将起作用(它说'所以这将被捕获:') -而且看起来我应该抛出一个 NSException (尽管我不是专家)
标签: swift cocoa error-handling