知道从Xamarin抛出NSException的时间

问题描述 投票:0回答:1

我有一些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是否已经存在可以用来处理这种情况的东西?

objective-c xamarin xamarin.mac
1个回答
1
投票

Runtime.MarshalManagedExceptionRuntime.MarshalObjectiveCException事件可用于拦截那些异常。

由于捕获这些异常不是性能上的缺陷,因此必须通过构建过程(mtouch / mmp)启用它们:

  • --marshal-managed-exceptions=

    • 默认
    • unwindnativecode
    • throwobjectivecexception
    • 中止
    • 禁用
  • --marshal-objectivec-exceptions=

    • 默认
    • unwindmanagedcode
    • throwmanagedexception
    • 中止
    • 禁用

[Xamarin具有Exception Marshaling的详细指南,涵盖了Xamarin.iOS和Mac:

© www.soinside.com 2019 - 2024. All rights reserved.