如何传递属性swift 3 urlsession didFinishDownloadingTo后台下载后委托?

我可以使用ios 10和swift 3成功下载后台的zip文件。

我使用一个backgroundsession数据任务:

let backgroundSessionConfiguration = URLSessionConfiguration.background(withIdentifier: (prefix + postfix)) let backgroundSession = Foundation.URLSession(configuration: backgroundSessionConfiguration, delegate: self, delegateQueue: OperationQueue.main) var request = URLRequest(url: dlUrl ) request.httpMethod = "GET" request.cachePolicy = NSMutableURLRequest.CachePolicy.reloadIgnoringCacheData let task = backgroundSession.downloadTask(with: request) task.resume() 

但是我想知道下载完成后,将一些特定的元数据传递给委托方法的最佳做法是什么:

  func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL){ 

我需要在这个委托内有一些关于下载的信息,这取决于用户之前做出的select。 我无法从服务器或url获取这些数据。

所以我想有一个variables或字典downloadType告诉我如何处理完成的下载,在代表有这样的事情

 if downloadType == "normal" ... do this else ... do that 

我不知道如果我可以安全地使用实现URLSessionDownloadDelegate协议的类的属性,而应用程序暂停? 当应用程序被挂起时下载完成时,类实例本身是否会被恢复,或者ios是否会创build一个新的类实例?

所以这个总是会起作用的:

 class ServerCom: NSObject, URLSessionDownloadDelegate { var updateTypeStr = "" [...] func somePublic(setUpdateType: String) { self.updateTypeStr = setUpdateType [...] func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL){ [...] if( self.updateTypeStr == "normal" ) { // do this else { // do that 

这个用例有更好的方法吗?

提前致谢!

当应用程序被挂起时下载完成时,类实例本身是否会被恢复,或者ios是否会创build一个新的类实例?

您有责任自行保存和恢复。

当守护进程完成后台请求时,您的应用程序可能会在干预期间被彻底终止(例如被暂停,可能会由于内存压力而被抛弃),因此您必须能够将任何相关信息保存到永久存储器能够从应用程序重新启动时从存储加载。

当使用后台会话testing应用程序时,发现调用exit(0)来终止应用程序的代码非常有用。 您从不在生产应用程序中执行此操作,但在testing应用程序重新启动后台请求完成时重新启动应用程序所需的对象的function时非常有用。 关键的一点是,在进行这个testing时,不应该尝试使用“双击主页button并向上滑动”来杀死应用程序,因为这样做也可以通过devise取消后台请求。 您想要testing应用程序在正常应用程序生命周期中被终止的情况,并且在后台请求完成后由networking守护程序重新启动。