0

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

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

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

我想详细了解该函数的工作原理(即何时调用等),但似乎找不到参考文档。我访问了这个 URL,但它没有说明该特定功能。

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

我在哪里可以阅读更多关于它的信息?

谢谢你,
三通

4

2 回答 2

2

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

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

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

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

  2. 在 Xcode 中按 cmd-shift-o,输入NSURLConnectionDataDelegate并回车。您已经找到了标题,并且方法在那里有描述:

    connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite: 在上传操作期间调用以提供进度反馈。请注意,如果需要重新传输请求,这些值可能会以意想不到的方式发生变化。

于 2012-02-22T21:26:15.473 回答
0

试试AFNetworking如果您担心支持,它正在成为 ASIHTTPRequest 的流行替代品。它还内置了对下载进度的支持。(请参阅此链接上的讨论。这是最近关于如何实际使用它的讨论

更新

如何跟踪上传或下载进度?(AFNetworking 常见问题解答)

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

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

于 2012-02-22T21:44:15.153 回答