gpt4 book ai didi

ios - URLSessionDownloadTask 奇怪的行为

转载 作者:行者123 更新时间:2023-11-28 12:04:23 32 4
gpt4 key购买 nike

我创建了一个类来使用 URLSession 下载文件。

我注意到一个奇怪的行为,当设备处于 Debug模式时,它正在下载文件。但是,如果我删除设备并手动运行应用程序,则下载根本无法进行。有时重新连接设备会开始下载。

这就是我创建 URLSession 的方式:

private lazy var urlSession: URLSession = {
let config = URLSessionConfiguration.background(withIdentifier: "org.company.id")
config.isDiscretionary = true
config.sessionSendsLaunchEvents = true
config.allowsCellularAccess = true
return URLSession(configuration: config, delegate: self, delegateQueue: nil)
}()

这是我的请求下载功能:

func requestDownload(urlString: String){
guard let url = URL(string: urlString) else {return}
downloadTask = urlSession.downloadTask(with: url)
downloadTask.taskDescription = urlString
downloadTask.resume()
}

这是该文件下载器类的链接:https://github.com/skdevil/PrakrstaFileDownloader

知道如何解决吗?

最佳答案

问题是,当您将它附加到调试器运行时,应用程序永远不会挂起,而在设备上则可以。

一些观察:

  • 您可能还没有实现 handleEventsForBackgroundURLSession在您的应用委托(delegate)或 urlSessionDidFinishEvents(forBackgroundURLSession:)在您的 URLSessionDelegate 中。它们是后台下载所必需的。我们需要查看这些实现以进一步发表评论。

    有关详细信息,请参阅 Downloading Files in the Background .

    仅供引用,我已经发布了 pull request在那个 repo 上,显示你需要做什么来支持后台 session 。

  • 或者,如果您已正确完成所有这些操作,请注意您已经设置了自主模式。这意味着它将在连接到电源和 wifi 时下载。是这样吗?

  • 请注意,我鼓励您进行一些日志记录,以便您了解发生了什么。但是您不能为此使用 Xcode 的调试机制(因为,正如您所注意到的,附加到 Xcode 会改变应用程序的行为)。

    您可以改为使用 WWDC 2016 视频中概述的“统一日志记录”进行记录 Unified Logging and Activity Tracing .这样,您就可以在 macOS 控制台上查看来自 iOS 设备的日志消息,而不必编写自己的文件日志记录系统。请参见 https://stackoverflow.com/a/25951564/1271826 中的第 3 点例如,如何在 macOS 控制台上观察 iOS 日志消息。或者观看前面提到的 WWDC 视频。

关于ios - URLSessionDownloadTask 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707439/

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