有时我会从 Objective-C 代码中得到异常。在我的示例中,这些异常并不重要,我希望应用程序继续工作。问题是如何处理这些异常?
例如,当我使用 GeoCoder 类时,我的应用程序会不时崩溃。我真的不在乎地理编码器是否无法对位置进行地理编码并希望让我的应用程序保持活动状态。在 try-catch 块中包含地理编码器调用并不能解决问题。
任何帮助将不胜感激!
有时我会从 Objective-C 代码中得到异常。在我的示例中,这些异常并不重要,我希望应用程序继续工作。问题是如何处理这些异常?
例如,当我使用 GeoCoder 类时,我的应用程序会不时崩溃。我真的不在乎地理编码器是否无法对位置进行地理编码并希望让我的应用程序保持活动状态。在 try-catch 块中包含地理编码器调用并不能解决问题。
任何帮助将不胜感激!
MonoTouch 在一定程度上尝试将 ObjC 异常转换为托管异常。这是通过为 ObjC 异常添加一个未处理的异常处理程序来完成的,并在其中抛出一个托管异常。这适用于辅助线程,但不适用于主线程,因为 iOS 在其主运行循环中有一个 try-catch 处理程序,如果有任何异常到达它,它将杀死您的应用程序(换句话说,异常已被处理,因此它永远不会到达 MonoTouch 的未处理异常处理程序)。
最好的方法是首先避免 ObjC 异常(Apple 的文档指出,ObjC 异常应该只用于真正的异常情况,因为它们有很多问题 - 例如内存泄漏很常见)。
显然不可能避免所有 ObjC 异常,因此我们尝试为仍然发生的情况寻找解决方法。为您的特定案例完成此操作的最佳方法是创建一个完整的测试案例并在此处打开错误报告:http: //bugzilla.xamarin.com,附上测试案例。