And*_*dru 1 exception-handling objective-c react-native-ios
我想将异常消息转换为NSError对象,以便可以在try-catch块中使用它(我实际上是在React Native的本机iOS模块上工作)。
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我想将异常转换为,NSError因为reject函数的第三个参数(拒绝JS端的Promise)期望输入的类型为NSError。我不确定我的解决方案(使用try-catch)在这种情况下是否是最好的方法。
您可以将异常转换为NSError对象,然后在警报面板中将错误对象中的信息呈现给用户。
但是,该指南并未显示该示例的代码示例,而仅显示了第二种方法的代码示例。您也可以在包含错误参数的方法中间接返回它们,这些错误参数对于我想要的而言似乎很复杂。
那么,如何将异常转换为NSError?NSError的API参考似乎不包含合适的功能。
您不能转换NSException为,NSError因为NSException它们没有相同的属性。有什么理由要抓住NSException而不是建立一种**NSError机制?异常通常是致命的且不可恢复,而错误则是非致命的且可恢复。
如果您仍然需要将转换NSException为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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3075 次 |
| 最近记录: |