有时在我的dataTask中处理我的请求时出错

时间:2018-10-02 15:06:42

标签: ios swift nsurlrequest

我在我的iOS项目(Swift 4)中使用URLSession

var postRequest = URLRequest(url: myUrl)
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

let dataTask = defaultSession.dataTask(with: postRequest) { data, response, error in
        if let error = error {
          // Sometimes I get error here
          showError(error.localizedDescription)
        } else if let data = data,
          let response = response as? HTTPURLResponse,
          response.statusCode == 200 {
          // most of the time, everything is fine
          ...
        }

dataTask?.resume()

当我运行代码与服务器对话时,通常没有问题,一切都按预期进行。但是有时我会得到非零的errorlocalizedDescriptionThere was an error processing your request

我不确定如何解决此问题,因为我没有获得更多的调试信息,而且这只是随机发生的。

有人可以指出我正确的方向吗?使用URLSession与服务器通话时会导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:0)

这是服务器端错误-可能是500或502,但可能有任何错误。如果打印错误代码,您可能会了解更多。

此外,默认情况下,NSURLSession在返回错误代码时会断开连接,但是可以告诉它获取错误页面数据(其中可能包含有关错误原因的更多信息)。

为此,请将委托方法添加到会话的委托中,例如

- (void)URLSession:(NSURLSession *)session 
          dataTask:(NSURLSessionDataTask *)dataTask 
didReceiveResponse:(NSURLResponse *)response 
 completionHandler:(void (^)(NSURLSessionResponseDisposition
                   disposition))completionHandler {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)httpResponse;
    // For server errors or success status, fetch the response body, else cancel.
    if (httpResponse.statusCode >= 500 && httpResponse.statusCode <= 599) {
        completionHandler(NSURLSessionResponseAllow);
    } else if (httpRepose.statusCode == 200) {
        completionHandler(NSURLSessionResponseAllow);
    } else {
        completionHandler(NSURLSessionResponseCancel);
    }
}

当然,您还必须创建并保留一个会话(因为默认会话没有委托)。