NSURLConnection 进度条与 sendAsynchronousRequest Objective-C

2024-01-07

我正在使用以下方法下载一堆较大的 zip 文件。这可能需要一段时间,所以我想显示一个进度条。

我研究了如何使用 NSURLConnection 的委托方法,它看起来很简单,但是我想通过“sendAsynchronousRequest”实现同样的效果。如何获取下载时下载的字节数以及预期的总字节数,以便显示进度条?我知道,如果我按照我现在的方式开始下载,我将无法使用委托方法。

// Begin the download process
- (void)beginDownload:(NSMutableArray *)requests {

    // Now fire off a bunch of requests asynchrounously to download
    self.outstandingRequests = [requests count];
    for (NSURLRequest *request in requests) { // Get the request
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

                                    // Error check
                                    if ( error != nil ) {

                                        // The alertview for login failed
                                        self.appDelegate.warningView.title = @"Refresh Error!";
                                        self.appDelegate.warningView.message = [error localizedDescription];

                                        // Show the view
                                        [self.appDelegate.warningView show];

                                        // Debug
                                        if ( DEBUG ) {
                                            NSLog(@"A request failed - %d left!",self.outstandingRequests);
                                        }

                                    }
                                    else {

                                        // Debug
                                        if ( DEBUG ) {
                                            NSLog(@"A request is done - %d left!",self.outstandingRequests);
                                        }

                                    }

                                    // Decrement outstanding requests
                                    self.outstandingRequests--;

                                    // No requests are left
                                    if (self.outstandingRequests == 0) {

                                       // Debug
                                       if ( DEBUG ) {
                                           NSLog(@"All requests are done!");
                                       }

                                       // Get rid of loading view
                                       [self performSelector:@selector(dismissLoadingView) withObject:nil afterDelay:0.15];

                                   }

                               }];

    }

}

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLConnectionDownloadDelegate_Protocol/NSURLConnectionDownloadDelegate/NSURLConnectionDownloadDelegate.html#//apple_ref/doc/uid/TP40010954-CH2-SW1 https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLConnectionDownloadDelegate_Protocol/NSURLConnectionDownloadDelegate/NSURLConnectionDownloadDelegate.html#//apple_ref/doc/uid/TP40010954-CH2-SW1

下载文件时如何为 NSURLConnection 制作进度条? https://stackoverflow.com/questions/2267950/how-to-make-an-progress-bar-for-an-nsurlconnection-when-downloading-a-file

http://iphonedevsdk.com/forum/iphone-sdk-development/24233-nsurlconnection-with-uiprogressbar.html http://iphonedevsdk.com/forum/iphone-sdk-development/24233-nsurlconnection-with-uiprogressbar.html

http://iphoneeasydevelopment.blogspot.com/2011/10/use-progess-bar-when-downloading-file.html http://iphoneeasydevelopment.blogspot.com/2011/10/use-progess-bar-when-downloading-file.html


sendAsynchronousRequest 将无法满足您的目的,因为在请求完成之前它不会调用您的回调。您需要使用 initRequest:withDelegate: 并处理您自己的数据积累。

当收到标头时(可能会多次重定向),您的 didReceiveResponse 方法将被调用,您可以在那里获取预期的大小:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    _expectedBytes = (NSUInteger)response.expectedContentLength;
    _data = [NSMutableData dataWithCapacity:_expectedBytes];

   // make a progress update here
}

每次收到数据块时,您都会收到对委托方法 didReceiveData 的调用,因此您知道到目前为止已收到多少数据。

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [_data appendData:data];
    _receivedBytes = _data.length;

   // make a progress update here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSURLConnection 进度条与 sendAsynchronousRequest Objective-C 的相关文章

  • 如何动态获取 UITableViewCell 的高度

    我创建了自定义的tableViewCell 我在UITableViewCell中添加了UIView SubView 所以我在 UIView 中的所有动态文本和图像内容都会根据文本和图像大小而变化 但现在 HeightforRowAtInde
  • 如何使用 CNContacts 快速获取手机号码?

    我有一些代码可以检索用户联系人中的所有电话号码 但只想过滤掉手机号码 目前 我只是通过将第一个数字为 或第二个数字为 7 的数字添加到数组中来实现此目的 如下所示 func findContacts gt CNContact let key
  • 如何使用 alamofire 通过基本身份验证上传图像?

    我正在尝试使用 alamofire 4 7 1 和此代码上传图像 但说实话 我怀疑我没有编写正确的代码来上传图像 func uploadDefect defectRemark String defectLocation String def
  • 如何为 iPhone 6+、6 和 5 指定不同尺寸?

    我想让 iPhone 6 6 和 5 上的视图看起来几乎相同 在附图中 我的意思是 例如 取消 按钮在 iPhone 5 中距离屏幕左边缘应为 30 像素 在 6 中为 35 像素 在 6 中为 45 像素 其他元素也类似 如何为每种类型设
  • 在 iOS 7 中 viewForHeaderInSection 部分是从 1 开始而不是从 0 开始

    我正在处理UITableView在我的项目中 这个项目是在 Xcode 4 5 中创建的 现在我正在使用 Xcode 5 所以我的问题是何时在 iOS 6 中运行我的项目 viewForHeaderInSection方法部分从 0 开始没问
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • 使用数组中的字符串淡入/淡出标签

    func setOverlayTitle self overlayLogo text Welcome var hello String Bon Jour GUTEN nMORGEN BONJOUR HOLA BUENOS D AS BUON
  • UIViewController 不旋转到横向

    在许多情况下需要旋转控制器但不起作用 现在我遇到了相反的问题 它正在旋转 我想禁用它 在那个 ViewController 中我有这个 BOOL shouldAutorotateToInterfaceOrientation UIInterf
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • 在 WKWebView 中禁用缩放?

    有谁知道在 WKWebView 中禁用双击和捏缩放的简单方法 我尝试过的任何方法都不起作用 Webview scrollView allowsMagnification false Error value of type WKWebView
  • 在 iOS 上使用 RNCryptor 异步解密大文件

    我需要在 iOS 上使用 RNCryptor 异步解密一个大文件 以便显示进度条 我在任何地方都找不到示例 因此尝试了我猜对的方法 但是 我想出的方法不起作用 解密器的处理程序从未被调用 并且线程在发送所有数据后因 EXC BAD ADDR
  • CATextLayer 上 iOS 6 中不需要的垂直填充

    背景 我在 iOS 5 中开始了我的项目 并构建了一个带有图层的漂亮按钮 我在按钮上添加了一个 textLayer 并使用以下代码将其居中 float textLayerVerticlePadding self bounds size he
  • 当应用程序进入前台时,如何重新启动基于块的动画?

    我有以下基于块的动画 UIView animateWithDuration 0 5f delay 0 0f options UIViewAnimationOptionRepeat UIViewAnimationOptionAutorever
  • 根据内容自动更改单元格高度 - Swift

    在 Swift 中使用 UITableView 有人可以帮我根据标签 图片和描述自动更改单元格的高度吗 所有信息都正确传递 我只需要帮助格式化它 我尝试使用调整它cell frame size height 但这没有效果 我可以更改故事板中
  • iOS7 由 Interface Builder 生成的 NSIBPrototypingLayoutConstraint 自动布局约束问题

    以前在 iOS6 中 我的聊天消息视图控制器使用 IB 中精心构建的自动布局约束正确显示和动画 下面是 Xcode 5 中删除了约束的当前视图层次结构 升级到 XCode 5 和 iOS7 后 我发现我需要清除所有旧的约束才能解决默认的半透
  • Xcode 异步单元测试在主线程上等待

    我正在尝试使用 Xcode 中的单元测试来测试一些异步代码 但主线程被阻塞 问题在于 某些正在测试的代码期望从 iOS 类 AVFoundation 接收回调 但是 AVFoundation 类似乎只会在主线程上回调 问题是 如果我正在进行
  • 无法将项目添加到 NSMutableArray ivar

    我的目标是将字符串添加到数组中 并在我调用的方法中执行此操作 在这个方法中 我在数组中得到一个空值 但不知道为什么 我在课程开始时有这样的内容 NSMutableArray listOfEvents 以及我在每个事件上调用的方法 void
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 在可可中将 NSMutableArray 写入文件时出现问题

    一个真正的初学者问题 我有一个 NSView 子类 在其中创建一个包含 NSValues 的 NSMutableArray 当我想使用 writetofile atomatically 将数组写入文件时 文件已创建 但它不包含可变数组所包含
  • 使用强光混合模式时突出显示伪影

    我正在 iPhone 应用程序中使用顶部图像的 HardLight 混合模式混合两个图像 它看起来像这样 UIGraphicsBeginImageContext size sourceImage drawInRect rectangle b

随机推荐

  • 将文本文件加载到 RichTextBox 的最快方法是什么?

    我使用 OpenFIleDialog 将文本文件加载到 RichTextBox 中 但是 当大量文本 例如大约 50 70 行的歌曲文本 并且我单击 打开 时 程序会挂起几秒钟 3 5 秒 正常吗 也许有一些更快的方法或组件来加载文本文件
  • 如何在bootstrap中设置datetimepicker的MinDate和maxDate属性

    我想在引导程序中为 datetimepicker 动态设置 minDate 和 maxDate 属性 请帮我解决这个问题 在这种情况下 在一个日期时间选择器中选择日期时 应将该选定日期设置为其他日期时间选择器的 minDate 在第二个日期
  • 分离的 pthread 和内存泄漏

    有人可以向我解释一下为什么这个简单的代码会泄漏内存吗 我相信 由于 pthread 是在分离状态下创建的 因此它们的资源应该在终止后立即释放 但事实并非如此 我的环境是Qt5 2 include
  • Visual Studio 2017 错误无法打开“X”进行写入 - 对路径的访问被拒绝

    抱歉 我似乎无法修复此错误 严重性代码 说明 项目文件行抑制状态 错误 CS2012 无法打开 C Users Usuario source repos WindowsFormsApp1 WindowsFormsApp1 obj Debug
  • docker本地注册表“exec:\”htpasswd \“:在$ PATH中找不到可执行文件”

    直到最近这还工作得很好 docker run entrypoint htpasswd registry 2 Bbn myuser mypwd gt my registry2 reg hub auth htpasswd 现在它出错了 dock
  • 从结果集中创建长字符串

    我在存储过程中的 MS SQL 中有一个结果集 假设它有一个 VARCHAR 列 但有许多行 我想创建一个包含所有这些值的逗号分隔字符串 有没有一种简单的方法可以做到这一点 或者我是否必须逐步遍历每个结果并手动构建字符串 最好我想在存储过程
  • 访问不同端口中的 spring security,以字符串“anonymousUser”形式获取主要数据

    我有一个应用程序在我的本地 8100 中运行 我的服务器端代码在它已实现的 8065 中执行Spring Security作为 Java 配置 当我从 8100 ionic 浏览器窗口输入登录服务器代码时 我得到的原则对象数据只有字符串作为
  • 您的 Ruby 版本是 2.3.0,但您的 Gemfile 指定为 2.1.2

    我正在尝试设置一个现有项目 跑步时bundle install 我收到以下错误 我已经尝试了许多可能的解决方案 但对我不起作用 我也运行了建议的命令 例如gem pristine bcrypt version 3 1 10但对我不起作用 b
  • sbt 任务类路径

    我正在处理 sbt 任务 我希望能够访问一些应用程序类和依赖项 具体来说 我想使用 scalaquery 生成数据库 DDL 有什么方法可以将这些依赖项添加到任务中 或者我可能需要为此创建一个插件 object ApplicationBui
  • 复制到本地主机后,Wordpress 总是重定向到 https

    当我将 WordPress 安装从服务器复制到本地网络服务器 MAMP 并尝试访问时localhost 8888 它总是将 http 重定向到 https 所以我总是得到一个ERR SSL PROTOCOL ERROR 我在任何地方都找不到
  • Ninject 在 appharbor 上启动应用程序时崩溃

    我在部署在 appharbor 上的 MVC 3 项目上使用 Ninject 我注意到应用程序启动时出现异常 看起来 Ninject 内部的某些内容是原因 但我找不到任何答案 所以请帮助我 将尝试在此处添加完整的异常 Server Erro
  • Openid 禁止错误

    在我能够正确安装它 打开 id 库 后 我在让它工作时遇到了一些问题 我正在使用打开 id 选择器 http jvance com pages JQueryOpenIDPlugin xhtml一个 jquery 插件 问题是 当我单击任何打
  • 升级到 ADT 20 后,键盘在 Intel x86 Android 模拟器上停止工作

    我的意思是我不能再从笔记本电脑键盘输入 Android 模拟器了 虚拟键盘和屏幕键盘工作正常 升级到工具版本 20 后 我遇到了同样的问题 我必须编辑 AVD 以添加一个选项 如下所示 从 Eclipse 转到 AVD 管理器 选择特定的
  • 通过索引变量访问 SML 元组

    问题很简单 如何在SML中使用索引变量访问元组 val index 5 val tuple1 1 2 3 4 5 6 7 8 9 10 val correctValue index tuple1 我希望有人能够提供帮助 提前致谢 不存在接受
  • 配置 Flask 开发服务器在网络上可见

    我不确定这是否是 Flask 特定的 但是当我在开发模式下运行应用程序时 http localhost 5000 我无法从网络上的其他机器访问它 使用http dev host ip 5000 例如 当 Rails 处于开发模式时 它可以正
  • 如何在 Android 上的片段中使用共享首选项?

    我有一个片段 我想将 Facebook ID 存储在共享首选项中 我无法在获取首选项函数中编写私有模式 我还想在另一个片段中访问这个共享首选项 我怎样才能这样做呢 这是我的代码 Session openActiveSession getAc
  • 使用键盘输入切换值以进行绘图

    我有矩阵中的数据集 我想在一组上绘图 然后使用键盘输入移动到另一组 这很可能是这样的 for t 1 N plot data t pause end 但我想及时向前和向后移动t 例如使用箭头 好的 可以这样做 direction input
  • 如果 Ubuntu 上安装了多个 Java 版本,如何检查 Oracle Java 版本

    我两者都有OpenJDK and 甲骨文Java安装在我的 Ubuntu 上 如果激活的java是OpenJDK 有没有办法在bash shell中检查Oracle java的版本 update java alternatives l将列出
  • 非管理员用户上的客户端无法使用 net.pipe 与服务进行通信

    我有一个使用 net pipe 协议托管 WCF 服务的客户端应用程序 客户端无法与在管理员用户下运行的其他 WCF 服务通信 我读到您无法在不同用户之间使用 net pipe 进行通信 有办法绕过它吗 我读到您无法在之间使用 net pi
  • NSURLConnection 进度条与 sendAsynchronousRequest Objective-C

    我正在使用以下方法下载一堆较大的 zip 文件 这可能需要一段时间 所以我想显示一个进度条 我研究了如何使用 NSURLConnection 的委托方法 它看起来很简单 但是我想通过 sendAsynchronousRequest 实现同样