swift - NSSetUncaughtExceptionHandler 在 Swift 3 中没有触发?

标签 swift cocoa error-handling

我正在 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/

相关文章:

ios - 界面生成器中的图像和标签与 TableView 单元格中的数据重叠

swift - 使用 init 函数初始化对象,为其参数提供默认值

swift - 名称节点始终为零 - ARKit Swift

Objective-C 如何创建一个以其字符串值作为键的枚举数组?

objective-c - 在 TableView 中选择一行时触发方法

Python:错误不会停止脚本

swift - 我可以调用主 ViewController 以便为我的游戏创建更多对象吗?

ios - 魔法记录不编译

php - trigger_error 与抛出异常

error-handling - 抑制整个脚本的错误