Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 知道何时从Xamarin抛出NSException_Objective C_Xamarin_Xamarin.mac - Fatal编程技术网

Objective c 知道何时从Xamarin抛出NSException

Objective c 知道何时从Xamarin抛出NSException,objective-c,xamarin,xamarin.mac,Objective C,Xamarin,Xamarin.mac,我有一些调用本机函数的Xamarin.Mac代码。调用函数时,有时会导致抛出NSException(取决于连接的硬件)。不幸的是,使用try/catch无法捕获异常,导致我的应用程序崩溃 现在,我可以忍受导致这种例外的情况。然而,我不能忍受我的应用程序崩溃 我希望能够在抛出NSException时捕获,可能会报告错误并继续 类似于以下的操作可以做到这一点: ExceptionCatcher.CatchExceptionAndGetError( () => _platformThin

我有一些调用本机函数的Xamarin.Mac代码。调用函数时,有时会导致抛出NSException(取决于连接的硬件)。不幸的是,使用try/catch无法捕获异常,导致我的应用程序崩溃

现在,我可以忍受导致这种例外的情况。然而,我不能忍受我的应用程序崩溃

我希望能够在抛出NSException时捕获,可能会报告错误并继续

类似于以下的操作可以做到这一点:

ExceptionCatcher.CatchExceptionAndGetError(
    () => _platformThing.SometimesThrowException(),
    out var error);

if (error != null)
{
    // Report error
}

// Carry on
我已经验证了在直接使用Objective-C时可以捕获异常


我知道NSException包装解决方案。但是,在尝试使用我的代码实现类似的功能之前,我是否可以使用Xamarin已有的功能来处理这种情况?

可以使用
运行时.MarshalManagedException
运行时.MarshalObjectiveException
事件拦截这些异常

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

  • --封送管理的异常=

    • 违约
    • 展开码
    • throwobjectivec异常
    • 流产
    • 禁用
  • --封送objectivec异常=

    • 违约
    • 解卷管理代码
    • throwmanagedexception
    • 流产
    • 禁用
Xamarin有一个异常封送详细指南,涵盖Xamarin.iOS和Mac:


是,添加一个
ObjCRuntime.Runtime.MarshalObjectiveException
处理程序,并使用
MarshalObjectiveExceptionMode.ThrowManagedException
为我提供一个可以处理的异常,这样我的应用程序就不会再崩溃。你真是太美了。非常感谢。你想把这个作为答案吗?我渴望学习和提高。为什么投反对票?很高兴这有帮助,我把评论变成了答案。