如何将异常转换为 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 对象 的相关文章

  • 将 iPhone 上的 stderr 写入文件和控制台

    我正在遵循答案中的建议here https stackoverflow com questions 5179108 iphone how to read application logs from device用于将 iOS 设备上的 NS
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s
  • 显示键盘时如何在 TextView 下方添加更多填充

    当我在 ScrollView 中有 TextField 并点击它时 键盘会按预期显示 但似乎 TextField 已向上移动到足以显示输入区域 但我希望移动到足够的位置 以便整体可见 否则它看起来像是被剪裁了的 我找不到改变这种行为的方法
  • ActionScript、NetStream.Play.Failed iOS AIR 移动设备

    我正在尝试以类似于 Tiberiu Ionu Stan http stackoverflow com questions 2036107 aac mp4 not working in actionscript 3s netstream 的方
  • FBFriendPickerViewController 未显示所有好友

    我正在使用 FBFriendPickerViewController 在我的 iOS 应用程序中显示要邀请的朋友列表 它仅显示安装了该应用程序的好友列表 为什么是这样 我还在我的应用程序中直接与 Facebook sdk 交互 以使用 Gr
  • UITabBarController 未选择的图标图像色调

    我有一个 UITabBarController 我正在尝试修改 现在 未选择的选项卡图标图像默认为灰色 我知道您无法以编程方式更改这些未选择的图标图像的色调 苹果表示 色调是由 png 文件本身的实际色调控制的 因此 如果您想要白色或绿色图
  • iPhone,如何隐藏标签栏按钮?

    如何隐藏单个标签栏按钮 我已经搜索过 但什么也没找到 只找到了完整的栏 我已经取得了一些进展 但仍然遇到问题 此代码位于我的应用程序委托中 带有选项卡栏的出口 我在其中调用它viewDidLoad选项卡栏中显示的第一个视图的视图 void
  • Obj-C / Swift 项目中的致命陷阱异常

    我开始将 Swift 代码集成到我的 Obj C 项目中 一切都进展顺利 但今天 当我更新到 Xcode 6 1 时 事情变得很糟糕 我从之前运行良好的 Swift 代码中收到了许多 陷阱 异常 第一次崩溃位于我的 UIFont 扩展中 这
  • 在 IOS 中通过 Linking.openURL React Native 打开设置

    我想从我的应用程序打开 ios 设置应用程序 设置目标是 settings gt notification gt myapp 打开和关闭推送通知 有一些关于如何链接到设置的文档 但我不知道如何打开深层链接 通知 gt myapp 我怎样才能
  • iOS 以编程方式将 AVI 转换为 MP4 格式

    我的应用程序中有一个查询 因为我想将 AVI 格式的视频转换为 MP4 电影格式 所以有没有什么方法可以以编程方式执行此操作 任何代码片段将不胜感激 你需要使用AVAssetExportSession将视频转换为 mp4格式 下面方法转换
  • iPhone UI 带有 Tableview 或 Scrollview? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 Swift 中调用 Objective-C 实例类型方法?

    我有一个 Objective C 类 如下所示 interface CustomObjectHavingData NSObject property nonatomic strong NSData objWithData instancet
  • iOS Safari 通过单击按钮触发扫描信用卡

    您好 我目前正在创建一个测试应用程序 当用户单击文本字段名称或卡号时 扫描信用卡功能对我有用 我的问题是 我希望当用户单击 button1 时发生同样的情况 这应该打开相机来扫描卡并填充现有的文本字段 即名称 卡号和到期日期 额外的好处是
  • APNS(Apple 推送通知服务器)的反馈服务

    我们正在使用Java作为推送通知提供商APNS I我能够将消息发送到APNS但我不知道如何获得该消息的反馈 请帮忙 反馈服务具有类似于用于发送推送通知的接口的二进制接口 您可以通过以下方式访问生产反馈服务feedback push appl
  • iOS:如何获取设备当前语言设置?

    我的应用程序中的一些功能应该基于其运行设备的语言设置 我想获取实际的语言而不是某些国家 地区设置 例如 如果语言是英语 我不在乎它是美国 英国 澳大利亚等 我很熟悉NSLocale对象 但它似乎与Region Format设置而不是Lang
  • xcode 4 垃圾收集已删除?

    我正在学习 Xcode 和 Objective C 但是我正在阅读的书使用的是旧版本 3 2 的 Xcode 其中一章完全致力于内存和泄漏 说我需要通过 项目设置 gt 构建 打开垃圾收集 但是 我找不到垃圾收集设置 它已被删除还是我只是错
  • Apple 允许后台任务运行多长时间?

    我必须将一系列图像文件上传到数据库 因此 我偶然发现苹果后台执行指南 https developer apple com library ios documentation iPhone Conceptual iPhoneOSProgram
  • WKWebView:无需 Javascript 即可缩放PageToFit 行为

    如何获得scalesPageToFit显示在 HTML 内容中的行为WKWebView 不使用 JavaScript 在我们的例子中需要禁用 JS 抱歉没有发布任何代码 但我不知道如何实现这一目标 我所知道的和我找到的所有解决方案都是基于J
  • 将文本拆分为数组,同时保留 Swift 中的标点符号

    我想将文本拆分为一个数组 保持标点符号与其余单词分隔开 因此字符串如下 Hello I am Albert Einstein 应该变成这样的数组 Hello I am Albert Einstein 我尝试过sting components
  • Dropbox API - 使用 Dropbox 作为服务器

    我想使用文件共享服务器来使某些文件在多台计算机上的应用程序的多个实例中保持最新和恒定 例如 例如 编写多人游戏 它将所有玩家的位置存储在文本文件中 并使用 Dropbox 之类的工具在所有应用程序中保持文本文件不变 每个应用程序实例都可以根

随机推荐

  • 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