簡體   English   中英

如何在完成處理程序塊中檢查NSURLSessionDownloadTask的狀態?

[英]How do I check the state of a NSURLSessionDownloadTask in the completion handler block?

說我創建一個NSURLSessionDownloadTask

let downloadTask = session.downloadTaskWithURL(URL, completionHandler: { location, response, error in
    ...
}

如果稍后在該downloadTask上調用cancel() ,它仍將調用完成處理程序,對嗎? 我想檢查下載任務的狀態是否為“正在Cancelling這樣它就不會試圖弄亂下載的圖像,在這種情況下不會有一個。

我無法檢查下載任務本身的狀態,因為它位於變量的創建范圍內。

檢查完成處理程序中的error參數。 或檢查NSURLSessionTaskstate屬性。 如果等於“ NSURLSessionTaskState.Completed”,則下載任務不會被取消。 文檔說:

任務已完成(未取消),並且任務的委托沒有收到任何進一步的回調。 如果任務成功完成,則任務的錯誤屬性為nil。 否則,它將提供一個錯誤對象,該錯誤對象可以告訴您出了什么問題。 此狀態下的任務不受超時限制。

完成處理程序僅在任務完成時執行,因此您可以在實例化時實際使用它。 為什么不利用捕獲列表來強制執行弱循環:

let downloadTask = session.downloadTaskWithURL(URL, completionHandler: [weak downloadTask] { location, response, error in
    ...
}

請記住,任務狀態可能會在處理程序中completed ,因此您應該檢查的是error參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM