我有一些Xamarin.Mac代码,它们调用本机函数as described here。调用该函数时,有时会引发NSException(取决于连接的硬件)。不幸的是,使用try / catch无法捕获该异常,这会使我的应用程序崩溃。
目前,我可以忍受引起例外的情况。但是,我无法忍受我的应用程序崩溃。
我希望能够在引发NSException时捕获陷阱,也许报告一个错误然后继续。
类似于以下内容:
ExceptionCatcher.CatchExceptionAndGetError(
() => _platformThing.SometimesThrowException(),
out var error);
if (error != null)
{
// Report error
}
// Carry on
我已经验证了直接使用Objective-C时可以捕获异常。
我知道NSException包装解决方案here。但是,在尝试实现类似这样的代码来使用我的代码之前,Xamarin是否已经存在可以用来处理这种情况的东西?
Runtime.MarshalManagedException
和Runtime.MarshalObjectiveCException
事件可用于拦截那些异常。
由于捕获这些异常不是性能上的缺陷,因此必须通过构建过程(mtouch / mmp)启用它们:
--marshal-managed-exceptions=
--marshal-objectivec-exceptions=
[Xamarin具有Exception Marshaling的详细指南,涵盖了Xamarin.iOS和Mac: