我正在 try catch Swift3 程序中的所有 NSException - 一直在关注 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] Failed to set (contentViewController) user defined inspected property on (NSWindow): *** -[__NSArray0 objectAtIndex:]: index 99 beyond bounds for empty NSArray
我还尝试将异常放入AppDelegate(在applicationWillFinishLaunching和applicationDidFinishLaunching中),但结果相同
最佳答案
我做了如下操作并在 Swift 3 中为我工作。 将 NSSetUncaughtExceptionHandler 定义为 AppDelegate 中任何方法声明之外的常量:
let uncaughtExceptionHandler : Void = NSSetUncaughtExceptionHandler { exception in
NSLog("Name:" + exception.name.rawValue)
if exception.reason == nil
{
NSLog("Reason: nil")
}
else
{
NSLog("Reason:" + exception.reason!)
}
}
这会在任何未捕获的异常时触发,因为一旦您的应用程序委托(delegate)实例加载(即应用程序启动时)就会评估该常量。 注意:Void 类型声明删除了针对“可能是意外”的 Void 推断类型的编译器警告;-) 。
关于swift - NSSetUncaughtExceptionHandler 在 Swift 3 中没有触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313663/