ios - 为什么无法捕获此iOS AWS开发工具包网络错误?

标签 ios objective-c amazon-web-services try-catch

我在应用程序中使用了AWS iOS SDK,最近我测试了无网络情况。这是我的代码:

dispatch_queue_t Q = dispatch_queue_create("ec2_instance_fetch", NULL);
dispatch_async(Q, ^{
    AmazonEC2Client *client = [[AmazonEC2Client alloc] initWithAccessKey:[ESCredentialsManager accessKey] withSecretKey:[ESCredentialsManager secretKey]];
    client.endpoint = [NSString stringWithFormat:@"https://%@", [ESRegionManager endpointForRegion:[ESRegionManager activeRegionObject]]];
    EC2DescribeInstancesResponse *response = [client describeInstances:[[EC2DescribeInstancesRequest alloc] init]];
    NSMutableArray *temp = @[].mutableCopy;
    for (EC2Reservation *reserv in response.reservations) {
        for (EC2Instance *instance in reserv.instances) {
            [temp addObject:instance];
        }
    }
    self.instances = temp;
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    });
});

在无连接的情况下,它将引发以下错误:
 *** Terminating app due to uncaught exception 'AmazonClientException', reason: 'Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo=0x16e55460 {NSErrorFailingURLStringKey=https://ec2.us-east-1.amazonaws.com/, NSErrorFailingURLKey=https://ec2.us-east-1.amazonaws.com/, NSLocalizedDescription=The Internet connection appears to be offline., NSUnderlyingError=0x16dea2c0 "The Internet connection appears to be offline."}'
*** First throw call stack:
(0x301adf4b 0x3a91c6af 0xbbae1 0xbb31d 0xba6c7 0xba177 0xbd3ab 0xa2bab 0x3adffd1b 0x3ae06273 0x3ae0606b 0x3ae06ce1 0x3ae06f59 0x3af41dbf 0x3af41c84)
libc++abi.dylib: terminating with uncaught exception of type AmazonServiceException
(lldb) 

所以我试图简单地捕获这样的错误:
dispatch_queue_t Q = dispatch_queue_create("ec2_instance_fetch", NULL);
dispatch_async(Q, ^{
    @try {
        AmazonEC2Client *client = [[AmazonEC2Client alloc] initWithAccessKey:[ESCredentialsManager accessKey] withSecretKey:[ESCredentialsManager secretKey]];
        client.endpoint = [NSString stringWithFormat:@"https://%@", [ESRegionManager endpointForRegion:[ESRegionManager activeRegionObject]]];
        EC2DescribeInstancesResponse *response = [client describeInstances:[[EC2DescribeInstancesRequest alloc] init]];
        NSMutableArray *temp = @[].mutableCopy;
        for (EC2Reservation *reserv in response.reservations) {
            for (EC2Instance *instance in reserv.instances) {
                [temp addObject:instance];
            }
        }
        self.instances = temp;
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
    }
    @catch (NSError *error) {
        NSLog(@"Error: %@", error);
    }
});

但是它仍然失败,并显示相同的错误,并且应用程序崩溃了。为什么我不能以这种方式捕获此错误?我怎样才能?

最佳答案

不要抓NSError。捕获NSException

关于ios - 为什么无法捕获此iOS AWS开发工具包网络错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21559757/

相关文章:

ios - RPScreenRecorder 在奇怪的情况下不录制麦克风

objective-c - 如何从代码中选择 UICollectionView 的项目/单元格

ios - 后退按钮突然不再出现在导航栏中

ios - 从不同的 View Controller 打开相同的 View

objective-c - 滚动内容以在 NSTextView 上显示当前光标位置

ios - 2个IOS App之间的自动连接

iphone - 如何手动旋转键盘(带动画)?

amazon-web-services - 无法通过CloudFormation创建ECS服务

amazon-web-services - 在标签中找到注释值 21。这大于类(class)数量

amazon-web-services - 更新堆栈时,属性SecurityGroupIds的值必须为“字符串列表错误”类型