我正在尝试下载文件,我想检测它何时使用NetworkReachabilityManager
失去连接,如下所示:
self.reachabilityManager?.listener = { status in
print("Status: \(status)")
if status == .NotReachable {
self.download?.suspend()
}
else if status == .Reachable(.EthernetOrWiFi) {
self.download?.resume()
}
self.reachabilityManager?.startListening()
最初我开始下载:
self.download = self.manager.download(.GET, url) { (temporaryURL, response) -> NSURL in
return NSURL(string: fullFilename)!
}
.progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in
self.setProgress(totalBytesRead, totalBytesExpectedToRead: totalBytesExpectedToRead)
}
.response { (request, response, data, error) in
self.handleDownloadResponse(fullFilename, response: response, data: data, error: error)
}
当我关闭网络时,我认为self.download?.suspend()
将暂停下载请求,之后self.download?.resume()
将重新启动下载,但进程处理程序永远不会被调用,过了一会儿响应处理程序以超时错误
我应该这样做吗?如何实现此行为(在恢复网络时恢复下载)?
答案 0 :(得分:1)
您需要对此逻辑进行相当多的更改才能使事情按预期工作。以下是一系列步骤,可以帮助您达到目的。
response
关闭,error
将指示连接问题。response
关闭中,如果data
参数不是nil
,则它是下载请求的resumeData
,可用于从哪里恢复下载它停了下来。data
参数为nil
,则您需要重新启动下载,因为无法恢复。isReachable
或isReachableOnEthernetOrWiFi
参数。 resumeData
进行新的下载请求(如果有),如果不这样做,则需要一个全新的请求。调用
response
闭包后,您无法再次运行相同的下载请求。
我没有尝试按照您的方式对下载请求使用suspend
和resume
。文档似乎暗示可以使用suspend
和resume
来执行您正在执行的操作,但通常的做法是取消请求,然后使用恢复数据创建一个新请求。在请求失败之前你还必须这样做,我认为这是不可能的。
我猜你的请求在调用可达性闭包时已经失败了。
希望这有助于您走上正轨。有关上述任何步骤的详细信息,请参阅URL Loading System文档以及Alamofire README。