我在使用框架时有一些误解NSURLSession
,这就是为什么我决定在没有 AFFramework/Alamofire 的情况下从头开始编写小应用程序。
我有一个 API 需要以下步骤来上传文件:
- POST 文件数据
- 获取响应 (JSON)
- 将一些 json 字段发布到
api/save
我有这样一个配置的后台会话:
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("myBackground")
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
我已经实现了两种方法:
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData)
我汇总所有数据的地方
和
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?)
我将这些数据转换为响应对象。这个响应对象对我来说非常重要。
一切正常,而应用程序在前台,但我在后台遇到问题。
情况1
开始上传数据后,应用程序立即崩溃。根据WWDC,我需要实施
func application(application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: () -> Void)
didCompleteWithError
并在方法中调用此处理程序。但在调用此方法之前,我需要api/save
使用上传响应中的数据进行调用。我怎样才能得到这些数据?
案例2
大部分情况类似。用户在上传过程中停止应用程序。比在几秒钟内加载应用程序,而会话适用于我的任务。现在会话调用didReceiveData
,但当然,一些数据丢失。在这种情况下我该怎么办?如何恢复响应数据?