ios - 从项目中的任何地方抛出异常

标签 ios objective-c xcode

我想在我的代码中的任何地方发生异常时显示警报。

不包含可能抛出异常的代码。

每次发生异常时,它都会在主类中显示错误。可以从那里处理吗?

这是我使用的抛出异常的正常方式:

@try {
 // code that may throw exception

 }
 @catch (NSException * e) {
  // show alert
 }
 @finally {     
 }

最佳答案

但是,我找到了一个有效的变通方法——创建我自己的异常处理程序(出于其他原因它也很有用)。首先,创建一个函数来处理错误并将其输出到控制台(以及你想用它做的任何其他事情)

    void uncaughtExceptionHandler(NSException *exception) {
      NSLog(@"CRASH: %@", exception);
      NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
      // Internal error reporting
    }

接下来,将异常处理程序添加到您的应用委托(delegate)中:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
     {   
        NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
         // Normal launch stuff
     }

如果这不起作用,那么只有两个可能的原因:

某些东西正在覆盖您的 NSSetUncaughtExceptionHandler 调用(您的整个应用程序只能有一个处理程序)。例如,一些 3rd 方库设置了自己的 uncaughtExceptionHandler。因此,请尝试将其设置在 didFinishLaunchingWithOptions 函数的末尾(或有选择地禁用第 3 方库)。或者更好的是,在 NSSetUncaughtExceptionHandler 上设置一个符号断点以快速查看谁在调用它。您可能想要做的是修改当前的而不是添加另一个。 您实际上并没有遇到异常(例如,EXC_BAD_ACCESS 不是异常)

关于ios - 从项目中的任何地方抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40858354/

相关文章:

ios - Xamarin iOS - 以编程方式加载 Storyboard引用

objective-c - 向 NSScrollView 添加大量 View

ios - 为 UINavigationController 自定义状态栏背景

ios - 使用自定义图层时删除标签栏背景

ios - 通过 iOS 应用程序以编程方式断开通话

ios - iOS11中的导航栏问题

objective-c - -init 与 +initialize 的实现

ios - 允许其他开发人员处理我的 XCode 项目

ios - iOS 中导航栏布局的项目太多

ios - Xcode 构建时出现格式错误