我在使用NSURLSession
框架一些誤解,這就是爲什麼我決定從頭開始編寫小應用,而無需AFFramework/Alamofire。NSURLSessionUploadTask獲得效應初探數據
我有一個需要以下步驟上傳文件的API:
- POST文件數據
- 獲取響應(JSON)
- 後一些JSON領域
api/save
我有這樣的配置背景會話:
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("myBackground")
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
我實現2種方法:
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData)
其中I聚集所有數據
和
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?)
其中I這個數據變換分析到響應對象。這個響應對象對我來說非常重要。
一切正常,而應用程序是在前臺,但我在後臺的問題。
案例1
應用程序崩潰之後我開始上傳數據。據WWDC我需要實現
func application(application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler:() -> Void)
和didCompleteWithError
方法調用此處理程序。但是,在調用此方法之前,我需要調用api/save
從上傳的響應數據。 我如何獲得這些數據?
案例2
晴類似的案件。用戶在上傳過程中停止應用程序。比在幾秒鐘內加載應用程序,而會話與我的任務一起工作。現在會議電話didReceiveData
,但當然,一些數據丟失。在這種情況下我應該怎麼做?如何恢復響應數據?
謝謝您的很好的解釋。我將你的答案標記爲「正確」,因爲(我相信)它會涵蓋他人的問題。但是,我沒有運氣實現'URLSessionDidFinishEventsForBackgroundURLSession'。我重新啓動BG會話並獲得'URLSession(會話:NSURLSession,dataTask:NSURLSessionDataTask,didReceiveData數據:NSData的)'我得到以下數據:'會話:<__ NSURLBackgroundSession:0x1668c060> dataTask:<__ NSCFBackgroundUploadTask:0x165ade60> {taskIdentifier:1} data:0'當我嘗試附加數據時,會崩潰我的應用程序 – user1284151
如果您在某處(例如GitHub或其他地方)上傳工作演示,我很高興看一看。 – Rob