我想将异常消息转换为 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(使用前将#替换为@)