如何如果NSURLConnection的的sendSynchronousRequest检测:retu

2019-08-01 07:31发布

我使用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