Update
基于这个很棒的教程 https://medium.com/swift-programming/learn-nsurlsession-using-swift-part-2-background-download-863426842e21,我整理了一个可用的示例项目GitHub https://github.com/jozsef-vesza/swift-lessons/tree/master/Networking。它有一个后台会话管理的示例。
根据苹果公司的URL加载系统编程指南 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html#//apple_ref/doc/uid/TP40013509-SW26:
在 iOS 和 OS X 中,当用户重新启动您的应用程序时,您的应用程序
应该立即创建后台配置对象
与任何具有未完成任务的会话相同的标识符
应用程序上次运行,然后为每个应用程序创建一个会话
配置对象。这些新会话同样会自动进行
与正在进行的后台活动重新关联。
因此,显然通过使用适当的后台会话配置实例,您的下载将永远不会“不断变化”。
我也发现了这个答案 https://stackoverflow.com/a/21359684/1832052真的很有帮助。
原答案
来自阿拉莫菲尔的GitHub 页面 https://github.com/Alamofire/Alamofire#creating-a-manager-with-background-configuration:
应用程序可以为后台和临时创建管理器
会话,以及自定义默认会话的新管理器
配置,例如默认标头 (HTTPAdditionalHeaders) 或
超时间隔(timeoutIntervalForRequest)。
默认情况下,顶级方法使用共享Manager
具有默认会话配置的实例。但是,您可以创建一个具有后台会话配置的管理器,如下所示:
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.example.app.background")
let manager = Alamofire.Manager(configuration: configuration)
然后您可以使用它提出请求Manager
实例。
manager.startRequestsImmediately = true
let request = NSURLRequest(URL: NSURL(string: "your.url.here")!)
manager.request(request)
通过查看它的实现,它还有一个属性叫做backgroundCompletionHandler
,因此您可以添加一个完成块:
manager.backgroundCompletionHandler = {
// do something when the request has finished
}