处理monotouch中的ObjC异常

时间:2012-05-11 07:01:48

标签: ios exception-handling xamarin.ios

有时我会从objective-c代码中获得异常。在我的示例中,这些异常并不重要,我希望应用程序继续工作。 问题是如何处理这些例外?

例如,当我使用GeoCoder类时,我的应用程序会不时崩溃。我真的不在乎地理编码器是否未能对地理位置进行地理编码并希望保持我的应用程序存活。包括try-catch块中的地理编码器调用并不能解决问题。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:6)

MonoTouch尝试在一定程度上将ObjC异常转换为托管异常。这是通过为ObjC异常添加未处理的异常处理程序来完成的,并在其中抛出托管异常。这适用于辅助线程,但不适用于主线程,因为iOS在其主运行循环中有一个try-catch处理程序,如果有任何异常到达它会杀死你的应用程序(换句话说,处理异常,所以它永远不会到达MonoTouch'未处理的异常处理程序)。

最好的方法是首先避免使用ObjC异常(Apple的文档声明ObjC异常只应用于真正的特殊情况,因为它们有许多问题 - 例如内存泄漏很常见)。 / p>

显然不可能避免所有ObjC异常,因此我们尝试找到仍然发生的情况的解决方法。为您的特定情况完成此操作的最佳方法是,您可以在此处创建一个完整的测试用例并打开错误报告:http://bugzilla.xamarin.com,附上测试用例。