objetivo c - iOS. ¿Cómo puedo detectar una excepción cuando otro código ya usa NSSetUncaughtExceptionHandler?


Quiero usar un controlador de excepciones global.

Llamar a applicationdidFinishLaunchingWithOptions esto:

NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

Y use esto para manejar la excepción:

    void uncaughtExceptionHandler(NSException *exception) {
        // handling exception
}

Pero también uso sdk, que ya usa NSSetUncaughtExceptionHandler. Entonces mi método uncaughtExceptionHandler no ha llamado cuando ocurre una excepción.

Sé que solo puede haber un controlador para una aplicación. Pero necesito eso y sdk, y este código puede manejar excepciones a nivel global.

¿Tienes¿Tiene alguna idea de cómo puedo usar NSSetUncaughtExceptionHandler en este caso? ¿U otras ideas sobre cómo puedo manejar las excepciones a nivel global? Genial gracias.



------------Respuesta------------

Llame a installUncaughtExceptionHandler() después de que el SDK NSSetUncaughtExceptionHandler cubra el controlador. Entonces se llamará a su uncaughtExceptionHandler.

Más adelante, puede almacenar el controlador del SDK y llamarlo en su uncaughtExceptionHandler para que el SDK funcione en conjunto.

Código de ejemplo:

static NSUncaughtExceptionHandler *exceptionHandler = NULL;

typedef void (*sighandler_t)(int);
static sighandler_t sigHandler = NULL;

static void handleException(NSException *e)
{
    //your code ...

    //call the SDK handler
    if (exceptionHandler) {
        exceptionHandler(e);
    }
}

static void handleSignal(int signal)
{
    //your code ...

    if (sigHandler) {
        sigHandler(signal);
    }
}

void installUncaughtExceptionHandler()
{
    // store the SDK handler
    exceptionHandler = NSGetUncaughtExceptionHandler();

    NSSetUncaughtExceptionHandler(&handleException);

    sigHandler = signal(SIGABRT, handleSignal);
    signal(SIGILL, handleSignal);
    signal(SIGSEGV, handleSignal);
    signal(SIGFPE, handleSignal);
    signal(SIGBUS, handleSignal);
    signal(SIGPIPE, handleSignal);
}

Etiquetas: exception objective-c xcode ios

Artículos relacionados:

¿Cómo obtener datos de mi propia cuenta de Google Analytics usando claves de cuenta de servicio?

Código de nota: 1973 No se puede crear usuario, usuario, @, localhost,; ya existe, mysql