我使用NSURLConnection's
sendSynchronousRequest:returningResponse:error:
方法(在一个单独NSOperation
的线程)连接到外部服务器中检索数据。 我怎么知道,如果一个操作结束超时,或其他网络故障?
Answer 1:
如果有错误,错误的参数将不为零时sendSynchronousRequest:returningResponse:error:
回报。
您可以通过检查返回值检索错误代码[NSError code]
。 对于超时错误代码是NSURLErrorTimedOut
。
例如:
NSError *error = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]
if (error.code == NSURLErrorTimedOut) {
// Handle time out here
}
Answer 2:
选中此extension
:
extension Error {
var isConnectivityError: Bool {
guard _domain == NSURLErrorDomain else { return false }
let connectivityErrors = [NSURLErrorTimedOut,
NSURLErrorNotConnectedToInternet,
NSURLErrorNetworkConnectionLost,
NSURLErrorCannotConnectToHost]
return connectivityErrors.contains(_code)
}
}
您可以在文档检查其他错误NSURLError
域扩展您的connectivityErrors
阵列。
Answer 3:
您可能会出现一个警告用户,并传递错误参数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];
}
希望能帮助到你!!
文章来源: How to detect if NSURLConnection's sendSynchronousRequest:returningResponse:error: ended up being timed out or other error