首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速崩溃检测

快速崩溃检测
EN

Stack Overflow用户
提问于 2021-02-24 15:18:38
回答 1查看 69关注 0票数 1

NSSetUncaughtExceptionHandler只捕获Objective-C异常。我只需要捕获快速异常。有可能吗?

NSSetUncaughtExceptionHandler捕捉到了这一条。设arr = NSArray()设x= arr4

我也想捕捉到这次崩溃。let number: Int?= nil let val = number!

EN

回答 1

Stack Overflow用户

发布于 2021-02-24 16:15:16

正如我在上面的评论中所提到的

Swift不处理异常,它处理错误,因此当你使用swift for let x = arr[4]的try catch块时,你不能捕获异常(它的数组越界异常不是一个错误)。

正如Vadian还指出的那样,Swift鼓励您捕获并解决这些异常,而不是在运行时捕获它们。

也就是说,在某些情况下,您可能需要显式地处理异常,例如,您正在处理用Objective-C编写的第三方框架并可能抛出异常,或者您可能正在处理某些仍然运行在Objective-C运行时并抛出异常的iOS应用程序接口,在这种情况下,在objective C中有一个自己的have方法并使用块/闭包将快速语句传递给它并在Objective-C try catch块中执行它们是很方便的,

你怎么做?

ExceptionCatcher.h

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface ExceptionCatcher : NSObject
+ (void)catchExceptionIfAny: (void(^)(void)) executeCodeBlock withCompletion: (void (^)(NSException *)) completion;
@end

ExceptionCatcher.m

代码语言:javascript
复制
#import <Foundation/Foundation.h>
#import "ExceptionCatcher.h"

@implementation ExceptionCatcher : NSObject

+ (void)catchExceptionIfAny: (void(^)(void)) executeCodeBlock withCompletion: (void (^)(NSException *)) completion {
    @try {
        executeCodeBlock();
    }
    @catch (NSException *exception) {
        NSLog(@"%@", exception.description);
        completion(exception);
    }
}

@end

最后,使用以下命令更新桥接头文件

代码语言:javascript
复制
#import "ExceptionCatcher.h"

并转到swift文件,并将其用作

代码语言:javascript
复制
        let x = NSArray()
        ExceptionCatcher.catchExceptionIfAny({[weak self] in
            let a = x[4]
            debugPrint(a)
        }) { (exception) in
            if let e = exception {
                debugPrint(e.description)
            }
        }

上面的代码之所以有效,是因为x被声明为NSArray,它是从NSObject扩展而来的,如果你使用x = [1,2,3],你将创建一个Swift数组的实例,显然swift数组不会抛出异常。所以当你使用这个方法时要非常小心。

这不是为了捕获所有类型的Exceptions而做的工作,应该谨慎使用(仅在不可能避免的情况下)这是一种过度的杀伤力,对于这种用例是不必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66346312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档