2014-03-04 56 views
6

我使用NSURLSession + NSURLDownloadTask與completionHandler:NSURLSession代表和completionHandler

[session downloadTaskWithURL:downloadURL completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) 

它的作品不錯。

但是當我想跟蹤progressBar中的下載時,我遇到了問題。 我想用NSURLSessionDownloadDelegate來跟蹤加載。 隨着上面的completionHandler它永遠不會被叫?!

使用:

NSURLSessionDownloadTask *downloadTask = 
[session downloadTaskWithURL:downloadURL]; 

將調用代表。

有什麼辦法可以使用completionHandler和delegates?
或使用completionHandler跟蹤下載的任何其他方式?

+0

只需使用委託方法。有什麼問題? – matt

回答

2

聘請NSURLSessionDownloadDelegatedidWriteData方法,可悲的是你必須使用的downloadTaskWithURL的再現,而不completionHandler,然後實現自己的URLSession:downloadTask:didFinishDownloadingToURL:來執行,否則你將在完成處理程序做了這些行動。

這有點煩人(尤其是因爲NSURLSessionDownloadDelegate設置在會話對象),但它是如何工作的。

2

documentation

NSURLSession兩種方式之一返回數據,根據不同的方法,您撥打:

  • 要完成處理程序塊數據返回到您的應用程序時,轉移成功完成或發生錯誤。
  • 通過在收到數據時調用自定義代理上的方法。

一兩種方式。要麼使用完成處理程序(如果您希望在最後通知所有人)使用委託方法(如果您需要完整的信息)。不是問題。這不像委託方法很難使用或任何東西;它可能只是總是更好地使用它們。

相關問題