2011-01-28 26 views
14

Estoy teniendo un desagradable error en la naturaleza, y no puedo señalarlo. ¿Hay alguna manera de tener un bloque Global Try/Catch, o una forma de manejar cualquier excepción que no esté disponible en Monotouch?Monotouch Global Exception handling

¿Puedo simplemente envolver UIApplication.Main(args) en una captura de prueba?

Después de capturar la excepción, me gustaría mostrar un UIAlertView para mostrar los resultados.

¿Algún ayuda?

+0

No estoy seguro si esto está en Monotouch, pero en Windows usaría http://msdn.microsoft.com/en-us/library/system.windows.application.unhandledexception(v=vs.95).aspx – Nate

Respuesta

14

Puede envolver UIApplication.Main (args) en una prueba {} catch {} pero no podrá mostrar un UIAlertView en ese punto, ya que hemos desenrollado la pila completa, incluida toda la interfaz de usuario. Lo que podría hacer es registrar la excepción en un archivo de bloqueo en la carpeta Documentos de su paquete de aplicaciones y mostrarlo en el siguiente lanzamiento o cargarlo en un servicio web.

Los tipos Exceptioneer también estaban trabajando en el soporte MonoTouch, que podría valer la pena investigar.

+0

Hola Geoff, mira una pregunta para ti en mi respuesta a continuación ... – Ethan

+1

Tratando de averiguar si Exceptioneer es abandonware o no ... – tomfanning

+2

Parece que sí. Tiempos tristes. – tomfanning

1

He tenido éxito con el uso del controlador de excepción no controlada, es decir, el evento AppDomain.CurrentDomain.UnhandledException. Esto parece capturar muchas (pero no todas) las excepciones no controladas. Parece que los bloqueos que están en código no administrado pueden hacer que la aplicación falle sin llamar a este evento.

Geoff: capturar este evento además de detectar excepciones que salen de UIApplication.Main ¿tiene sentido o sería uno de los métodos preferidos?

+0

Realmente no importa, pero sí los bloqueos en el código nativo lo derribarán. La aplicación es básicamente corrupta en ese punto y no hay nada que podamos hacer para manejarlo con gracia. Uno de los miembros de la comunidad monotouch experimentó con la redirección de stdout y stderr a un archivo utilizando dup2 (3) en compilaciones de lanzamiento, para poder subir el registro de fallas a sí mismo en la siguiente ejecución, lo cual es algo que se podría hacer. –