NSURLSession代理和完成处理程序

6

我正在使用NSURLSession + NSURLDownloadTask和completionHandler:

进行操作。
[session downloadTaskWithURL:downloadURL completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error)

它运行得很好。

但是当我想要在进度条中跟踪下载时,我遇到了问题。 我试图使用NSURLSessionDownloadDelegate来跟踪加载。 使用上面的completionHandler,它从未被调用?!

使用:

 NSURLSessionDownloadTask *downloadTask =
[session downloadTaskWithURL:downloadURL];

将调用委托。

是否有办法同时使用completionHandler和委托?
或者在使用completionHandler时跟踪下载的其他方法?


只需使用委托方法。有什么问题吗? - matt
2个回答

2
为了使用NSURLSessionDownloadDelegatedidWriteData方法,您需要使用不带completionHandlerdownloadTaskWithURL版本,并实现自己的URLSession:downloadTask:didFinishDownloadingToURL:方法来执行您原本在完成处理程序中要执行的操作。这有点烦人(特别是因为NSURLSessionDownloadDelegate在会话对象中设置),但这就是它的工作方式。

2
根据文档,NSURLSession会根据你调用的方法以以下两种方式之一返回数据:
1. 通过完成处理程序块将数据返回给您的应用程序,在传输成功或出现错误时通知您。 2. 调用自定义代理上的方法,随着数据的接收而返回数据。
两种方式中的一种。如果您只想在结束时得到通知,可以使用完成处理程序(completion handler),否则可以使用代理方法获取完整信息。这不是问题。并不是说代理方法很难使用;使用它们可能总是更好的选择。请注意,HTML标记已保留。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接