【问题标题】:Implementing Progress Indictor For NSURLConnectionDelegate protocol为 NSURLConnection 委托协议实现进度指示器
【发布时间】:2012-02-22 20:49:30
【问题描述】:

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

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

- (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

我在哪里可以了解更多信息?

谢谢你,
三通

【问题讨论】:

标签: objective-c nsurlconnection nsurlconnectiondelegate


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    尝试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 常见问题解答)

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

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

    【讨论】:

    • 为什么投反对票?我想进行必要的更正。
    • 这个答案与问题无关。
    • 它看起来像是直接针对他的第一个声明。 “我正在尝试在尝试上传和下载文件时做一些进度指示”我不认为它是题外话。
    • 第一个陈述不是问题。尝试找到询问标记:) 无论如何,建立互联网连接是一项基本任务,每个程序员都应该知道如何去做。是的,他可以使用更好的框架来实现他想做的事情,但他不会学到任何东西。
    • 顺便说一下,AFNetworking 上传块使用他所询问的-[connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite] 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2014-10-23
    • 2011-05-13
    • 1970-01-01
    相关资源
    最近更新 更多