我可以使用 ios 10 和 swift 3 的应用程序代码在后台成功下载 zip 文件。
我使用背景会话数据任务:
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){
我需要在这个委托中获取一些关于该下载的信息,这取决于用户之前所做的选择。我无法从服务器或 url 获取这些数据。
所以我想要一个变量或字典 downloadType 告诉我如何处理完成的下载,在委托中有这样的东西
if downloadType == "normal" ... do this
else ... do that
我不确定在应用程序挂起时是否可以安全地使用实现 URLSessionDownloadDelegate 协议的类的属性?当应用程序挂起时下载完成时,类实例本身是否会恢复,还是 ios 会创建该类的新实例?
所以这总是有效的:
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
该用例有更好的方法吗?
提前致谢!