我使用NSURLConnection's
sendSynchronousRequest:returningResponse:error:
方法(在单独的NSOperation
线程中)连接到外部服务器以检索数据。如何知道操作是否超时或其他网络错误?
答案 0 :(得分:14)
如果出现错误,sendSynchronousRequest:returningResponse:error:
返回时,error参数将为非零值。
您可以通过检查[NSError code]
返回的值来检索错误代码。超时的错误代码为NSURLErrorTimedOut
。
例如:
NSError *error = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]
if (error.code == NSURLErrorTimedOut) {
// Handle time out here
}
答案 1 :(得分: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
数组。
答案 2 :(得分:-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];
}
希望它有所帮助!!