实现NSURLConnectionDelegate协议的进度指示器

时间:2012-02-22 20:49:30

标签: objective-c nsurlconnection nsurlconnectiondelegate

我在尝试上传和下载文件时尝试做一些进度指示。

一直在阅读,看起来这是我需要使用的方法。

- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite

我想更多地了解该功能是如何工作的(即何时调用等),但似乎无法找到参考文档。我去了这个网址,但它没有说明这个特定的功能。

https://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html%23//apple_ref/occ/intf/NSURLConnectionDelegate

我在哪里可以阅读更多相关信息?

谢谢你,
三通

2 个答案:

答案 0 :(得分:2)

NSURLConnection为其代表制定了非正式协议。这在iOS 5中发生了变化(我认为在OSX上也是如此)。他们弃用NSURLConnection中声明的方法,并将其移至正式协议NSURLConnectionDelegateNSURLConnectionDataDelegate

现在是有趣的部分。他们弃用了这些方法,他们甚至从NSURLConnection文档中删除了它们,但它们没有记录新的正式协议。 目前,仅记录了NSURLConnectionDelegate。 <{1}}未在任何地方提及。

有两种方法可以找到方法的作用。

  1. 查看以前版本的NSURLConnectionDataDelegate文档(例如iOS 4.3)。我会给你一个链接,但我无法在网上找到它。也许您已经在XCode中下载了库

  2. 在Xcode中按cmd-shift-o,键入NSURLConnection并按Enter键。您找到了标题,方法在那里有描述:

      

    连接:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:                   在上传操作期间调用以提供                   进展反馈。请注意,值可能                   如果请求需要,以意外的方式改变                   被转发。

答案 1 :(得分:0)

尝试AFNetworking如果您担心支持,它正在成为ASIHTTPRequest的流行替代品。它还内置了对下载进度的支持。 (See discussion on this link.Here is a recent discussion of how to actually use it

更新

How do I track upload or download progress?(AFNetworking faq)

AFURLConnectionOperation提供方法setUploadProgressBlock:和setDownloadProgressBlock:。每个方法都采用一个参数,该参数是一个在请求生命周期内定期执行的块。该块没有返回类型,并且有3个参数:为此回调读取或写入的字节数,到目前为止读取或写入的总字节数,以及预期要读取或写入的总字节数。

如果要更新进度条,可以设置相应的进度块,将进度量设置为读取或写入的总字节数除以预期数,标准化在0.0和1.0之间。基于此值的UI更新将在发出请求时异步更新。