gpt4 book ai didi

ios - downloadTaskWithRequest 混淆行为(swift,IOS)

转载 作者:搜寻专家 更新时间:2023-11-01 07:29:47 25 4
gpt4 key购买 nike

我不明白以下内容,希望有人理解 :-)

我正在从 url 下载文件(下载时间为 10 分钟),下载完成后工作正常。

但是:当我在一分钟后模拟崩溃或互联网中断并再次重新启动应用程序时,它对我来说表现得很奇怪。在这种情况下,当重新启动我的应用程序以使用相同的 sessionid 再次下载时,似乎有 2 个下载任务并行工作。我通过从 10% 到 0% 并返回的跳跃进度条来识别这一点。一个是从头开始,另一个是我想继续旧的转移。 (不确定)。我可以重新启动,然后队列中还有一个。

有人可以确认这种行为吗?有人知道我该怎么做吗:- 只继续中断的下载任务(首选:-))- 或者我怎样才能从头开始。

这是我的下载代码,可以正常工作,没有任何中断。

func download_file(sURL: String, sToLocation: String) {

println("start downloading ...");
println("sURL : " + sURL + " sToLocation : " + sToLocation);
bytesDownloaded=0;

var delegate = self;
delegate.storePath=sToLocation;
delegate.progressView=progressView;
struct SessionProperties {
static let identifier : String! = "url_session_background_download"
}
var configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(SessionProperties.identifier)
var backgroundSession = NSURLSession(configuration: configuration, delegate: delegate, delegateQueue: nil)
//myURLSession = NSURLSession(configuration: configuration, delegate: delegate, delegateQueue: nil)
var url = NSURLRequest(URL: NSURL(string: sURL)!)
var downloadTask = backgroundSession.downloadTaskWithRequest(url)

//downloadTask.cancel()

downloadTask.resume()

}

更新当我使用不同的 sessionid 时,下载从头开始。先前启动的下载任务仍在后台运行。所以我想知道为什么我不能在不并行开始新下载的情况下使用旧的 sessionid 恢复之前的下载任务?

最佳答案

使用下载任务的全部意义在于,即使您的应用未运行或崩溃,下载也可以继续。您无需继续下载。它实际上发生在一个单独的后台守护进程中。您只需使用相同的 ID 重新创建 session 。

在您重新创建 session 后,任何现有的下载都会自动与新 session 相关联,并且只要任务完成就会调用您的委托(delegate)方法。

如果您的应用程序在下载完成时未运行,您还需要实现一些魔法来处理后台启动。参见 URL Session Programming Guide了解详情。

关于ios - downloadTaskWithRequest 混淆行为(swift,IOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33371127/

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