【问题标题】:URLSession background upload - no Internet connectionURLSession 后台上传 - 没有 Internet 连接
【发布时间】:2020-11-30 18:56:43
【问题描述】:

我正在使用带有后台上传的 URLSession。我将session委托设置为self。当我在没有 Internet 连接的情况下开始上传任务时,我没有调用任何委托方法。如果没有 Internet 连接或上传时中断,我想显示消息并取消任务。你怎么能这样做?

let session = URLSession(configuration: URLSessionConfiguration.background(withIdentifier: "background"), delegate: self, delegateQueue: nil)
let request = ...
let data = ...
let task = session.uploadTask(with: request, fromFile: dataURL)
task.resume()

当我使用非后台任务时,我可以知道它

let task = self.session.dataTask(with: request) { (data, response, error) in

    //if let e = error as NSError?,
    //    e.code == Int(CFNetworkErrors.cfurlErrorNotConnectedToInternet.rawValue) {
    // handle no internet
    //}
}

【问题讨论】:

  • ReachabilitySwift 是你的朋友
  • @NeilGaliaskarov 不!那太不可靠了……这不是因为超时而引发错误吗?您可以预料到这一点并继续每 X 秒重试一次
  • 它不会抛出超时错误,因为它是根据优先级调度为后台任务,所以它最多可以执行一周,并且会一直等待连接。 @J.Doe

标签: swift urlsession background-fetch


【解决方案1】:
let task = self.session.dataTask(with: request) { (data, response, error) in

    //if let e = error as NSError?,
    //    e.code == Int(CFNetworkErrors.cfurlErrorNotConnectedToInternet.rawValue) {
    // handle no internet
    //}
}

在后台会话中永远不会调用完成块(当您的应用程序处于后台时)。 您需要使用委托,在完成所有任务后调用。

如果你不使用委托。使用 Reachability.whenUnreachable 块:取消任务并显示消息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多