ios - Objective c iPhone 重定向到未捕获异常的错误页面

标签 ios objective-c iphone exception error-handling

我有一个类,如果存在以下情况,我想将用户重定向到错误页面:未捕获的异常、捕获的异常或自定义异常。我还想关闭错误电子邮件。 (以便我收到通知)。

我无法访问此类中的当前 View Controller (在未捕获异常的情况下)。因为它是由委托(delegate)监听器触发的 onUncaughtException(NSException* exception)

我怎样才能访问当前的 View Controller ,或者访问失败,模态地将用户重定向到错误 View Controller ?

#import "ErrorHelper.h"
#import "ErrorViewController.h"
#import "Global.h"
#import "AppDelegate.h"

@implementation ErrorHelper


+(void) handleUncaughtError:(NSException*) exception
{
    NSLog(@"Uncaught exception occurred!");
    
    [self sendErrorEmailIfAppropriate:exception :nil];
    [self redirectToErrorPage];
}

+(void) handleCaughtError:(NSException*) exception
{
    NSLog(@"Error caught!!");
    
    [self sendErrorEmailIfAppropriate:exception :nil];
    [self redirectToErrorPage];
}

+(void) handleCaughtCustomError:(NSString*) ref :(NSString*) details
{
    NSLog(@"Custom error caught!!");
    //can do conditional branching on @ref, to do appropriate action.
    
    [self sendErrorEmailIfAppropriate:nil :details];
    [self redirectToErrorPage];
    
    
}

+(void) sendErrorEmailIfAppropriate:(NSException*) exception :(NSString*)details
{
    if([[Global get] isInTestMode] || [[Global get] isInLiveMode]) {
        bool isCustomException = details != nil;
        
    }
}

+(void) redirectToErrorPage
{
    /*Try redirect user to error page
    E.G:
     -There's been an error, our App Dev team will try and resolve the issue for you
     -Regards -Dev team
     
    */
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    
}

@结束

最佳答案

您应该假设 Cocoa 异常是不可恢复的。不要扔掉它们,不要将它们添加到您的程序中。 (在 C++ 中使用异常很好,尽管在这方面混合使用 C++ 和 ObjC 可能是不安全的,因为 ObjC 并不是为这种控制流或展开时的清理而设计的)。

有一些奇怪的 ObjC API 会抛出异常,您可以从其中一些中恢复。如果可能,请使用不会抛出的替代方法。如果您必须在这种情况下尝试/捕获,那么您应该使您的处理程序尽可能位于调用站点的本地。假设一个未捕获的 ObjC 异常或一个被高级处理程序捕获的异常是不可恢复的。

现在,因为您捕获的异常是调用站点的本地异常,您可以轻松添加逻辑以将错误传播到 View Controller 或返回到事件循环(例如 AlertView)。是的,在这种情况下,您可能会引入一些错误输出参数或返回值。

电子邮件是一个单独的问题。

关于ios - Objective c iPhone 重定向到未捕获异常的错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13225328/

相关文章:

iphone - iOS 6 的 Paypal 问题

ios - 将手势滑动到右上角、左上角等角落

objective-c - 定期启动/唤醒 iOS 应用程序

ios - iOS 中的 UITabbarController 底部有空格,顶部有灰线

ios - 警告 : Attribute Unavailable: Content Edge Inset in iPhone SDK for iOS versions prior to 3. 0

ios - xcode 使用 iOS 10 设备构建项目,但启动时崩溃 : Message from debugger: Terminated due to memory issue

ios - 查看堆栈或绘图

ios - 后台模式 iOS 中的蓝牙

ios - 导航栏在运行时改变颜色

iphone - iOS UnitTest 目标停止运行我的 SenTestCases,为什么?