Esto hace el trabajo. Llame al método SetupExceptionHandling() en el inicio de la aplicación. La magia es la parte NSRunLoop. Pero la aplicación va a estar en un estado extraño en ese punto, con efectos impredecibles. Por lo tanto, sugiero que se elimine la aplicación una vez que el usuario decida qué hacer con la excepción, por ejemplo, volviéndola a lanzar.
public static class IOSStartupTasks {
private static bool _HaveHandledException;
public static void HandleException(object sender, UnhandledExceptionEventArgs e) {
if (!(_HaveHandledException)) {
_HaveHandledException = true;
UIAlertView alert = new UIAlertView("Error", "Bad news", "report", "just crash");
alert.Delegate = whatever; // delegate object should take the exception as an argument and rethrow when it's done handling user input.
alert.Show();
NSRunLoop.Current.RunUntil(NSDate.DistantFuture); // keeps the app alive, but likely with weird effects, so make sure you don't let the user back into the main app.
}
}
public static void SetupExceptionHandling() {
AppDomain domain = AppDomain.CurrentDomain;
domain.UnhandledException += (object sender, UnhandledExceptionEventArgs e) =>
IOSStartupTasks.HandleException(sender, e);
}
}
Esto realmente no responde a su pregunta original. –