Estoy intentando usar NSAssert
en toda la aplicación de mi iPhone para que, si ocurre una condición inesperada, la aplicación falle rápidamente y se cuelgue con un mensaje significativo en el registro de fallos.Uso de NSAssert en subprocesos
Esto funciona bien si el error NSAssert
se encuentra en el hilo principal, ya que aumenta NSInternalInconsistencyException
de forma predeterminada, lo que no se detecta y detiene la ejecución. Pero también estoy procesando en subprocesos de fondo, en cuyo caso el NSAssert
acaba abortando el hilo, pero la programación sigue ejecutándose.
Mi solución actual es coger y volver a lanzar la excepción en el hilo principal (en este caso, NSOperation
's main
método):
- (void)main {
@try {
int x = 14;
...
NSAssert1(x > 20, @"x should be greater than 20, was %d", x);
...
}
@catch (NSException *e) {
[e performSelectorOnMainThread:@selector(raise) withObject:nil waitUntilDone:YES];
}
}
¿Hay una mejor manera? Tal vez usando un NSAssertionHandler personalizado?
sé que sólo podía utilizar C de assert
con una anotación estática:
assert(x > 20 && "x should be greater than 20");
pero esto no me permitirá mostrar cuál es el valor real de fracaso es x
.
Estoy teniendo el mismo problema, pero la solución propuesta no funcionará para mí. El NSAssert se activa, el hilo muere, pero la aplicación continúa ejecutándose. Estoy usando el motor Cocos2D. ¿Alguien podría proporcionar una solución más completa? –