NSURLSession委托和completionHandler
我正在使用NSURLSession + NSURLDownloadTask with completionHandler:
[session downloadTaskWithURL:downloadURL completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error)
它工作很好。
但是当我想跟踪进度栏中的下载时,我遇到了问题。 我正在尝试使用NSURLSessionDownloadDelegate来跟踪加载。 与上面的完成处理程序,它永远不会被称为?
使用:
NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:downloadURL];
会打电话给代表。
有没有办法使用completionHandler和委托?
或者使用completionHandler跟踪下载的任何其他方式?
要使用didWriteData
方法,你必须使用downloadTaskWithURL
而不使用completionHandler
,然后实现你自己的URLSession:downloadTask:didFinishDownloadingToURL:
执行你在完成处理程序中完成的操作。
这有点烦人(特别是因为NSURLSessionDownloadDelegate
设置在会话对象),但它是如何工作的。
从文档 :
NSURLSession以两种方式之一返回数据,具体取决于您调用的方法:
- 当传输成功完成或发生错误时,将数据返回到应用程序的完成处理程序块。
- 在收到数据时调用自定义委托上的方法。
两种方法之一。 要么使用完成处理程序(如果你想要的最后通知) 或使用委托方法(如果你想要完整的信息)。 不是问题。 这不像委托方法很难使用或任何东西; 它可能只是总是更好地使用它们。