5

我使用NSURLConnection's sendSynchronousRequest:returningResponse:error:方法(在单独的NSOperation线程中)连接到外部服务器以检索数据。我如何知道操作结束是否超时,或其他网络错误?

4

3 回答 3

14

如果有错误,返回时错误参数将非零sendSynchronousRequest:returningResponse:error:

您可以通过检查返回的值来检索错误代码[NSError code]。超时的错误代码是NSURLErrorTimedOut

例如:

NSError *error = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]

if (error.code == NSURLErrorTimedOut) {
// Handle time out here
}
于 2012-10-10T12:24:58.013 回答
0

检查这个extension

extension Error {

    var isConnectivityError: Bool {
        guard _domain == NSURLErrorDomain else { return false }

        let connectivityErrors = [NSURLErrorTimedOut,
                                  NSURLErrorNotConnectedToInternet,
                                  NSURLErrorNetworkConnectionLost,
                                  NSURLErrorCannotConnectToHost]

        return connectivityErrors.contains(_code)
    }
}

您可以在文档中检查NSURLError域中的其他错误以扩展您的connectivityErrors阵列。

于 2018-03-19T13:59:42.080 回答
-1

您可以向用户显示警报并将错误参数传递sendSynchronousRequest:returningResponse:error:给警报的消息。

代码将是这样的:

[NSURLConnection sendSynchronousRequest: req returningResponse: &response error: &error];

if (error)
{
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}

希望能帮助到你!!

于 2012-10-10T12:17:13.233 回答