NSSetUncaughtExceptionHandler 在 Swift 中无法捕获异常,但 Crittercism 可以

3
NSSetUncaughtExceptionHandler 的作用是捕获异常并将其转储到某个地方,以便我们可以找出应用程序崩溃的原因和异常情况。
在 Objective C 中,它可以按预期捕获异常。这里是参考资料
但是,在 Swift 中,当异常发生时,它无法捕获。以下是我在didFinishLaunchingWithOptions中使用的代码。
 NSSetUncaughtExceptionHandler { exception in
            NSUserDefaults.standardUserDefaults().setObject("Exception Details Are \n\nExceptionName--> \(exception.name) \nReason -->\(exception.reason!)\n\(exception.description)", forKey: "Exception")
            NSUserDefaults.standardUserDefaults().setObject("Call Stack Symbols:\(exception.callStackSymbols)", forKey: "ExceptionCallstack")
            NSUserDefaults.standardUserDefaults().synchronize()
        }

以下是我用来使应用程序崩溃的代码片段

    var c=["a","b","c"]
    var d=c[4]

有人能告诉我在这里做错了什么吗?

你是如何测试的?(你无法捕获Swift运行时错误。) - Martin R
哦!有没有办法捕获Swift运行时错误?我已经更新了问题,并附上了导致应用程序崩溃的代码片段。 - Durai Amuthan.H
据我所知,Swift正在与Objective C运行在同一个运行时上。 - Durai Amuthan.H
我尝试了Crittercism,它捕获了这个错误。但是我不想实现任何第三方工具,我想要捕获自己的错误并将其保留在应用程序内部。 - Durai Amuthan.H
我不知道Crittercism是什么或者它的作用。据我所知,你无法捕获Swift运行时错误(例如Array越界访问,或解包一个为nilOptional)。 - Martin R
1个回答

0
在安装NSSetUncaughtExceptionHandler之前,请先初始化Crittercism。
在您的处理程序开头,调用以下代码:
[Crittercism logHandledException:exception]; // ObjC
或者
Crittercism.logHandledException(exception) // Swift

我正在尝试使用NSSetUncaughtExceptionHandler或其他本地代码来捕获崩溃,而不使用第三方库,如Crittercism - Durai Amuthan.H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接