2015-10-07 106 views
0

我正在研究從我們的服務器下載文件的應用程序(相當大的文件)。我在前臺和後臺管理下載文件(無需關閉應用程序)。我的問題是,用戶使用多任務屏幕故意關閉應用程序使用NSURLSessionDownloadTask時使用resumeData的正確方法是什麼?

在這種情況下,我在didCompleteWithError方法得到一個回調和接收具有error.userInfo包含恢復數據的NSURLSessionDownloadTaskResumeData項下NSData對象錯誤。

問題是:這種情況應該如何處理?我是否應該立即使用didCompleteWithError方法中的downloadTaskWithResumeData來啓動另一個任務,或者我需要將resumeData NSData對象保存在UserDefaults中,並在下一次應用程序運行時使用它?

我試圖做這樣的事情在didCompleteWithError

if (error?.userInfo[NSURLSessionDownloadTaskResumeData] != nil) { 
       Logger.printLogToConsole(self.TAG, aMethodName: __FUNCTION__, aMessage: "Resume data was found"); 
       let req = task.originalRequest 
       let languageCodeWrapped: AnyObject? = NSURLProtocol.propertyForKey("languageCode", inRequest:req!)! 
       if let languageCode = languageCodeWrapped { 
        SessionDownloader.sharedInstance.downLoadWithResumeData(languageCode as! String, aResumeData: error?.userInfo[NSURLSessionDownloadTaskResumeData] as! NSData) 
        if taskDelegate != nil { 
         DownloadSessionDelegate.sharedInstance.setDelegateForTaskId(taskDelegate, taskId: "\(task.taskIdentifier)", code: languageCode as! String) 
        } 
       } 
      } 

但有些東西不工作的權利,而我真的不能調試它,因爲我需要殺掉基本上殺死應用程序調試過程。

在此先感謝您的幫助。

回答

0

它不工作,因爲應用程序已被終止,只給你很少的時間(約5秒)來保存你的東西。

,並處理您的案件,請參閱從apple docs

以下注意事項如果iOS應用程序是由系統終止和重新啓動,應用程序可以 使用相同標識符來創建一個新的配置對象,並 會議並在終止時檢索正在進行的轉賬狀態 。此行爲僅適用於系統終止應用程序的正常 。 如果用戶從多任務屏幕終止應用程序 ,系統將取消所有會話的 後臺傳輸。

所以看起來你有你的情況來處理這個如你所說NUUser默認值來定義自定義的東西,但我建議使用NSURLCache。

0

將它保存在NSUserDefaults可能是最好的選擇。然後,當用戶重新啓動應用程序時,使用相同的標識符重新創建後臺會話,然後使用恢復數據重新創建任務。如果它們中的任何一個都無法恢復,您將獲得新的下載。 (畢竟,恢復就是盡力而爲。)

然而,機會很好,你將無法獲得簡歷數據,因爲任務在你提問時會消失。

相關問題