如何检测NSURLConnection的sendSynchronousRequest:returningResponse:error:最终是否超时或其他错误

时间:2012-10-10 12:03:53

标签: objective-c ios cocoa nsurlconnection

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

3 个答案:

答案 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];
}

希望它有所帮助!!