Tengo una pregunta sobre el manejo de errores/excepciones en el iPhone.Cómo manejar correctamente los errores en el iPhone
He leído la documentación sobre Excepción, y parece que las excepciones se pueden usar solo para situaciones excepcionales.
¿Significa que no puede usarlos como en java?
por ejemplo, estoy tratando de escribir un controlador de caso de uso para mi aplicación. Tengo algunos ejemplos en Java de proyectos anteriores en ese idioma, que usan excepciones en caso de errores.
la pregunta simplemente es: ¿puedo seguir el ejemplo que tengo en Java, y "traducirlo" en Objective-C (y usar excepciones de Objective-C) o hay una mejor manera de hacerlo?
Este es el código me gustaría hacer Objective-C amigable:
public void addPerformance(Perfomance perf) {
//do some preparation
...
//execute the usecase
executor(new AddPerformance(perf));
}
private void executor(Usecase usecase) {
try {
UnitOfWorkServices.INSTANCE.bizTransactionStart();
usecase.execute();
UnitOfWorkServices.INSTANCE.bizTransactionCommit();
} catch (RealException re) {
UnitOfWorkServices.INSTANCE.bizTransactionEscape();
throw re;
} catch (Exception e) {
UnitOfWorkServices.INSTANCE.bizTransactionEscape();
throw new FatalException(this.getClass().getName() + "/executor("
+ usecase.getClass().getSimpleName() + ")", e,
"APPXCP_006_UNEXPECTED_EXCEPTION",
"\n\t |*| : Unexpected exception translated into FatalException");
} finally {
UnitOfWorkServices.INSTANCE.bizTransactionEnd();
}
}
Todas las excepciones están destinados a ser capturado por la interfaz de usuario para mostrar un mensaje de error.
gracias por su ayuda, Michael
genial! Muchas gracias por su respuesta ! – Themikebe
Solo una pequeña cosa, si se llama al código anterior desde una instancia compartida (el controlador de casos de uso) que se llama desde la interfaz de usuario, ¿funciona de la misma manera? error 'NSError *; [[UCCServices sharedInstance] addPerformance: perf andError: & error]; if (error) {// alerta de dislay con información de error} ' – Themikebe
Esta respuesta es incorrecta en dos detalles importantes; ** no puedes ** traducir el código pesado de excepción al Objective-C y esperar obtener el mismo comportamiento ** a menos que ** ese código no llame a los frameworks * del sistema * en absoluto *. En segundo lugar, 'if (error)' es * siempre incorrecto *; una vez que haya comprobado que 'success' es falso, se debe establecer' error' * * (si no está configurado, ha encontrado un error en el código que ha llamado). – bbum