objective-c - 知道何时从 Xamarin 抛出 NSException
问题描述
我有一些调用本机函数的 Xamarin.Mac 代码,如此处所述。调用该函数时,有时会引发 NSException(取决于连接的硬件)。不幸的是,使用 try/catch 没有捕获到异常,它使我的应用程序崩溃。
现在我可以忍受导致异常的情况。但是,我不能忍受我的应用程序崩溃。
我希望能够在抛出 NSException 时进行捕获,也许会报告错误并继续。
像下面这样的东西会做到这一点:
ExceptionCatcher.CatchExceptionAndGetError(
() => _platformThing.SometimesThrowException(),
out var error);
if (error != null)
{
// Report error
}
// Carry on
我已经验证直接使用Objective-C时可以捕获异常。
我知道这里的 NSException 包装解决方案。但是,在尝试实现这样的东西来处理我的代码之前,是否有一些已经存在于 Xamarin 中的东西可以用来处理这种情况?
解决方案
和事件Runtime.MarshalManagedException
可Runtime.MarshalObjectiveCException
用于拦截这些异常。
由于捕获这些异常不是无性能的功能,因此您必须通过构建过程(mtouch/mmp)启用它们:
--marshal-managed-exceptions=
- 默认
- 展开本机代码
- 抛出objectiveexception
- 中止
- 禁用
--marshal-objectivec-exceptions=
- 默认
- 展开托管代码
- 抛出托管异常
- 中止
- 禁用
Xamarin 有一个涵盖 Xamarin.iOS 和 Mac 的异常封送处理详细指南:
推荐阅读
- sql - 根据类型和“父级”合并多个级别
- java - 从令牌过滤器调用时未注入自动装配服务
- javascript - 如何在另一个异步函数中处理异步函数?
- json - Electron-Vue 从 JSON 动态生成 PDF 文件并下载
- r - cbind() data.frame(..., check.names = FALSE) 中的错误:参数暗示不同的行数。这是什么意思?
- excel - Excel- transpose columns with vlookup grouped by ID and date
- mysql - 为了使以下 SQL 代码正常工作,我应该在此处进行哪些更改?
- typescript - typescript - 使用默认值传递可选选项对象
- clojure - Clojure subseq returns incorrect values
- hyperledger - 超级账本印地。证明