gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:07:00 26 4
gpt4 key购买 nike

我在我的 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()

当我运行代码与服务器对话时,通常没有问题,一切都按预期进行。但有时我会收到非零错误localizedDescription表示处理您的请求时出错

我不知道如何解决这个问题,因为我没有得到更多的调试信息,而且这种情况只是随机发生的。

有人能给我指出正确的方向吗?在使用 URLSession 与服务器通信时,什么可能导致此错误?

最佳答案

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

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

为此,请向 session 的委托(delegate)添加委托(delegate)方法,例如

- (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);
}
}

当然,您还必须创建并保留 session (因为默认 session 没有委托(delegate))。

关于ios - 有时在我的 dataTask 中处理我的请求时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com