如何将异常转换为 NSError 对象

2024-04-15

我想将异常消息转换为 NSError 对象,以便我可以在 try-catch 块中使用它(我实际上正在研究一个React Native 的原生 iOS 模块 https://facebook.github.io/react-native/docs/native-modules-ios.html).

RCT_EXPORT_METHOD(myMethod:(NSDictionary *)dict
             resolver:(RCTPromiseResolveBlock)resolve
             rejecter:(RCTPromiseRejectBlock)reject)
{
  @try {
    // Do something which could throw something (NS Error or NS Exception)
    resolve(nil);
  } @catch (NSException *exception) {
    // HERE I WANT TO TRANSFORM THE EXCEPTION exception INTO AN ERROR error
    NSError error = ???
    reject(@"my_error", @"Could not do something important", error);
  }
}

我想将异常转换为NSError因为第三个参数reject函数(拒绝 JS 端的 Promise)期望输入的类型NSError。我不确定我的解决方案(使用 try-catch)在这种情况下是否是最好的。

In 这个苹果开发者指南 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html it says

您可以将异常转换为 NSError 对象,然后在警报面板中向用户显示错误对象中的信息。

但是,该指南没有显示该方法的代码示例,仅显示了第二种方法的代码示例您还可以在包含错误参数的方法中间接返回它们这对于我想要的东西来说似乎很复杂。

那么,如何将异常转换为 NSError 呢?NSError 的 API 参考 https://developer.apple.com/reference/foundation/nserror似乎没有包含合适的功能..


你无法转换NSException to NSError因为NSException它们不具有相同的属性。有什么理由去抓NSException而不是建立一个**NSError机制?异常通常是致命的且不可恢复的,而错误是非致命的且可恢复的。

如果您需要完成转换NSException to an NSError无论如何,你可以像这样手动完成:

@try {
    // Something
} @catch (NSException *exception) {
    NSMutableDictionary * info = [NSMutableDictionary dictionary];
    [info setValue:exception.name forKey:@"ExceptionName"];
    [info setValue:exception.reason forKey:@"ExceptionReason"];
    [info setValue:exception.callStackReturnAddresses forKey:@"ExceptionCallStackReturnAddresses"];
    [info setValue:exception.callStackSymbols forKey:@"ExceptionCallStackSymbols"];
    [info setValue:exception.userInfo forKey:@"ExceptionUserInfo"];

    NSError *error = [[NSError alloc] initWithDomain:yourdomain code:errorcode userInfo:info];
    //use error
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将异常转换为 NSError 对象 的相关文章

  • 在 UITableviewCell 高度动画的同时动画 CALayer 阴影

    我有一个 UITableView 我正在尝试使用它来展开和折叠beginUpdates and endUpdates方法并在发生时显示阴影 在我的自定义 UITableViewCell 中 我有一个图层 我为其创建阴影layoutSubvi
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • Objective-C 实例变量?

    我确信我在这里的困惑只是因为陷入 Java 思维方式 并且不理解 Obj C 在这种情况下有何不同 在Java中 我可以在类中声明一个变量 就像这样 并且每个instance该类的 将会有它自己的 MyClass String myVar
  • iOS Swift 检测键盘事件

    我能以某种方式检测来自 iOS 键盘的事件吗 我想检测此类事件UIViewController哪个没有UITextField或任何此类物体 我只有四个圆圈UIView我想在按下键盘上的按钮时将它们涂成不同的颜色 您没有任何对象可以从键盘获取
  • 使用 UIActionSheet 更改视图时工具栏项目消失

    当从 a 启动视图时UIActionSheet按钮 通过导航栏后退按钮返回视图后 工具栏虽然仍然可见 但上面没有任何以前的按钮 自从更新到 iOS 6 以来 这个错误就出现了 并且是在模拟器和仅运行 iOS 6 的设备上测试时发生的 如果我
  • 对 UIImage 进行方形裁剪,导致图像拉伸

    当尝试执行 UIImage 的中心裁剪时 我得到以下结果 左侧是原始图像640 1136 右边是适合正方形的裁剪图像UIImageView at 320 320 turns to 我对比率元素进行了相当多的修改 以便它可以正确检测要修剪的量
  • 尝试从独立的 Apple Watch 应用发出网络请求

    当应用程序是独立应用程序时 Apple Watch 是否无法进行网络通话 即使手表已连接到 iPhone 我正在使用新的独立应用程序目标 它没有附带可以发出 WatchConnectivity 请求的配对 iOS 应用程序 我十有八九收到
  • iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

    我正在编写一个 iOS 应用程序 用于与 mini mPlay Drumi MP18B 小型蓝牙扬声器 进行通信 据我所知 showBluetoothAccessoryPickerWithNameFilter仅显示协议字符串添加到 Info
  • 自动布局和ios5

    我正在使用故事板 我已经使用了自动布局 但它不适用于 ios5 并且会崩溃 所以我想删除它 但是 如何取消选中自动布局 但如果我取消选中自动布局 我如何为 iPhone 4 和 5 设置屏幕 Regards 您可以在 IB 中禁用自动布局
  • 在 Interface Builder 中的资产目录上使用图像

    是否可以直接在界面生成器上使用添加到资产目录中的图像 这是怎么做到的 在 UIImageView 属性上 我看不到任何引用资产目录上任何图像的选项 Import the images into the xcassets folder 单击右
  • 切换到工作区并在 Xcode 中添加 CocoaPods 后提交 git 吗?

    我刚刚在 Xcode 5 中将 CocoaPods 添加到我当前的项目中 当然 CocoaPods 创建了一个工作区 并且我已在 Xcode 中启动了该工作区 我在工作区中看到了我的项目和 Pods 项目 我的项目从第一天起就处于源代码控制
  • 如何使用 ZBar 读取器的 scanCrop 属性?

    我正在使用 iPhone 的 ZBar SDK 来扫描条形码 我希望阅读器仅扫描特定的矩形而不是整个视图 为此需要将阅读器的 scanCrop 属性设置为所需的矩形 我很难理解必须设置的矩形参数 有人可以告诉我如果在纵向视图上它的坐标是 我
  • 为了支持 iPhone 5 的更长屏幕,需要检查什么? [复制]

    这个问题在这里已经有答案了 可能的重复 iPhone 5屏幕尺寸如何处理 https stackoverflow com questions 12396545 how to deal with iphone 5 screen size iP
  • 在WKWebview中设置useragent

    如何在 WKWebView 中设置自定义用户代理字符串 我正在尝试嵌入我的应用程序的版本 以便我的服务器端可以看到可用的功能 我找到了以下方法 let userAgent MyApp 1 33 7 request setValue user
  • 具有多种自定义单元格类型的 RxSwift 表视图

    我想知道是否有任何代码示例RxSwift当我可以在一个表视图中使用多个自定义单元格时 例如 我有两个部分 第一部分有 10 个单元格 类型为CellWithImage标识符和第二部分有 10 个带有类型的单元格CellWithVideo标识
  • Swift 中 UIImages 的淡入淡出动画

    我有一组图像 我希望它们在登录屏幕的背景中淡出 我无法在 swift 中找到任何可以做到这一点的东西 有什么办法我可以做到吗 这是我当前的代码 override func viewDidLoad super viewDidLoad star
  • 应用未能及时恢复

    我在一个非常具体的场景中遇到 未能及时恢复 崩溃 我认为与看门狗相关 仅在从后台恢复时 并且仅在进入后台后在很短的时间内执行此操作 a最多几秒钟 这似乎是相关的崩溃日志 Incident Identifier E30F2238 5B15 4
  • 如何自动为 Swift 类创建初始化程序?

    UPDATE 使用结构而不是类 struct 在很多方面都更好 它有自己的初始化器 这是我的模型课 是否有可能创建init自动方法 每次我都必须将所有变量一一初始化 这会花费很多时间 class Profile var id String
  • iOS 发送 iMessage 尽可能简单

    我希望能够以编程方式发送 iMessage 除了调用一个将文本发送到带有消息的号码的函数之外 无需执行任何其他操作 这两个消息都是文本框 我真的很感激一些示例代码 因为我在网上搜索过 但我发现没有任何帮助 这不适用于商业应用程序 仅适用于我
  • 如何使用 afnetworking 在后台上传任务

    我正在尝试使用 AFNetworking 上传大文件 并在应用程序处于后台时继续上传 我可以很好地上传文件 但是当我尝试使用后台配置时 应用程序崩溃并显示以下堆栈跟踪 异常 EXC BAD ACCESS 代码 1 地址 0x8000001f

随机推荐

  • Microsoft Graph API 更新其他用户的照片?

    使用 Microsoft Graph API 我能够获取 Azure Active Directory 租户中所有用户的列表 并确定他们是否有个人资料图片 然后 我想获取没有照片的用户列表并为他们上传一张 但 API 返回 403 错误 即
  • MVC5 通过流畅验证比较两个可为空的日期

    如何在流畅的验证中编写规则来检查两个可为空的日期 因为开始日期需要早于结束日期 我正在思考 RuleFor c gt c StartDate NotEmpty 如果开始日期不为空且结束日期不为空则进行比较 像这样的东西 RuleFor ac
  • HTML 中的 JavaScript 和 SVG [重复]

    这个问题在这里已经有答案了 我有 JavaScript 文件 我有 SVG 文件 我还有 HTML 文件 img src svgfile svg type 有人知道如何在 JavaScript 中调用 SVG 元素吗 以圆圈为例 如果您想使
  • 约束接口中的函数参数

    在接受函数的接口中约束函数参数的语法是什么 我试过 interface Num a gt Color f a gt Type where defs 但它说Name a is not bound in interface Your inter
  • 如何在不删除数据库文件的情况下完全清除SQLite3数据库?

    出于单元测试的目的 我需要完全重置 清除 SQLite3 数据库 运行测试套件时 所有数据库都是在内存中创建的 而不是在文件系统上创建的 因此我无法删除任何文件 此外 一个类的多个实例将同时引用数据库 因此我不能只在内存中创建一个新数据库并
  • 如何在 C# 中构建具有未指定参数数量的方法

    这是我的代码 private static string AddURISlash string remotePath if remotePath LastIndexOf remotePath Length 1 remotePath retu
  • 将前四个列表项移至列表末尾

    所以我有一个包含几个的列表 li 元素 ul li a li li b li li c li li d li li e li li f li li g li li h li ul 上下文是我想重用liiOS 的 1 000 个内存密集型列表
  • 从 java.sql.ResultSet 检索列名

    With java sql ResultSet有没有办法获取列的名称String通过使用列的索引 我查看了 API 文档 但找不到任何内容 您可以从以下位置获取此信息ResultSet元数据 看结果集元数据 https docs oracl
  • 是否有记录的方法来设置 iPhone 方向?

    我有一个应用程序 我想在某些视图中支持设备旋转 但其他视图在横向模式下特别有意义 因此当我交换视图时 我想强制将旋转设置为纵向 UIDevice 上有一个未记录的属性设置器可以实现这一点 但显然会生成编译器警告 并且可能会随着 SDK 的未
  • 如何从 xarray 数据集中选择特定数据变量

    背景 我正在尝试通过 xarray 和 OPeNDAP 下载 GFS 天气数据 netcdf4 文件 非常感谢涡度0123 https stackoverflow com questions 52406826 load selection
  • 我可以确定是否从终端运行 Perl 脚本吗?

    我可以确定是否从终端运行 Perl 脚本吗 如果我不确定的话 我宁愿默认假设它是从浏览器运行的 但如果有一种方法可以确保它 100 是从终端运行的 我会很高兴 出于调试目的 这是直接取自 ExtUtils MakeMaker 的源代码pro
  • 如何在 Dart 中对字符串列表进行排序?

    我在 API 文档中看到有一个sort 方法上List 但我不清楚它需要什么参数 当前的需求是进行非常简单的直接 alpha 比较 1 快速解决方案 谢谢你的提问 您可以对列表进行排序String像这样 main final List
  • Vue.js 2 - 从 body 标签中删除初始边距

    如果这是一个愚蠢的问题 我很抱歉 我对 Vue 还很陌生 我创建了一个 Vue 使用命令vue init webpack
  • 重新分配值时维护每个键的对象值类型

    const obj a 1 b foo for const k of Object keys obj as keyof typeof obj obj k obj k TS游乐场 https www typescriptlang org pl
  • 从 VB6 和 C# 调用 DLL 给出的双精度结果略有不同

    我在 DLL 中有一个专有库 我没有代码 该库已在 VB6 中使用多年 我正在尝试将VB6代码升级到C 并希望使C 代码完全复制VB6的行为 当从每个环境调用时 我无法使 DLL 中完成的某些计算的双精度结果完全匹配 在 VB6 中 我有类
  • React使用dangerouslySetInnerHTML来渲染带有html标签的json

    我正在尝试渲染一个 json 列表 其中列表中的字符串中包含 html 标签 如下所示jsbin https jsbin com deqiqeb edit js console output 它可以在 Jsbin 中运行 但在我的控制台中我
  • 是否可以使用 Mono 运行 clickonce 应用程序?

    我正在开发 clickonce 应用程序 我可能想在 Mac 平台上分发该应用程序 我知道我可以使用 Mono 编译 Net 应用程序 并且它可以在 Mac 上运行 但是我可以使用 clickonce 作为安装程序吗 thanks 我认为
  • LinqKit:AsExpandable 不起作用

    Code public static GetRows var to ret db TableRows Select x gt new TableRowModel TableRowId x TableRowId Type x Type Nam
  • 从 iPhone 直接链接到撰写评论页面

    我一直在尝试将用户重定向到评论页面 我尝试了 3 种不同的 URL 格式 转到 Safari 上的产品页面 http itunes apple com us app british accent id350212768 mt 8 http
  • 如何将异常转换为 NSError 对象

    我想将异常消息转换为 NSError 对象 以便我可以在 try catch 块中使用它 我实际上正在研究一个React Native 的原生 iOS 模块 https facebook github io react native doc