【发布时间】:2017-01-02 13:49:15
【问题描述】:
有几个人出于不同的原因收到此错误。我找到的答案都没有解决我的问题。
我使用 Timberjack 记录我的 Alamofire 请求。
我所有的 GET 请求都可以正常工作,并且我以 JSON 格式接收数据。 另一方面,如果 POST 包含 JSON 正文,我的 POST 每次工作大约 10 次。
服务器未指定任何 Keep-Alive 标头。
部署目标是 iOS 9.0
这是我与 Timberjack 共享的经理:
class HTTPManager: Alamofire.Manager{
static let sharedManager: HTTPManager = {
let configuration = Timberjack.defaultSessionConfiguration()
let manager = HTTPManager(configuration: configuration)
return manager
}()
}
定义请求:
let parameters: [String: AnyObject] = ["status":status]
request = HTTPManager.sharedManager.request(.POST, "\(baseURL)\(uri)", parameters: parameters, encoding: .JSON).validate()
发送请求:
request!.responseJSON(queue: queue, options: .AllowFragments, completionHandler: { (response) in
//Handling the response
})
大多数情况下,服务器会收到一个空的 JSON 正文。但有时它确实有效并且接收到正文并且服务器以 OK 响应。当它不起作用时,我收到错误:
Error: The network connection was lost.
FAILURE: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."
UserInfo={NSUnderlyingError=0x12fa47cb0 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "The network connection was lost."
如果有人能解释这里发生的事情,我将永远感激不尽:)
编辑 1 我们让服务器用 "Connection": "close" 响应每个调用,这对解决问题没有任何帮助。该应用程序始终默认发送 "Connection": "keep-alive" 并且无法更改。这可能是问题吗?应用程序认为连接已打开,即使它已被服务器关闭?但即使您等待几分钟,POST 调用似乎也只能随机运行。
编辑 2 即使我在 GET(s) 和/或 POST(s) 之间等待 30 秒。 GET 总是有效的。 POST 随机工作(很少)。我在大多数 POST 上都收到 -1005 错误。即使我收到网络连接丢失错误,服务器仍会收到我的请求,但 JSON 正文丢失。
EDIT 3 - 丑陋的解决方案 在我的回复中,我检查了错误代码 -1005,当我收到此错误时,我只是重新创建请求并重试。这导致向服务器发送大约 2-4 个 POST 请求,其中一个 POST 工作,其余的具有空的 JSON 正文。
【问题讨论】:
-
你在模拟器上运行吗?尝试重新启动模拟器并选择另一个。我之前遇到过这个问题
-
@h44f33z 不在模拟器上,但谢谢!
标签: ios json swift post alamofire