如何等待 NSURLSession 的所有任务完成?

2024-01-04

Why is NSURLSession创建并恢复 NSURLSessionTask 后操作队列为空?

有没有办法判断 NSURLSession 是否有待处理的任务?

目标是等待多个任务完成,但这不起作用:

NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithStreamedRequest:request];
[uploadTask resume];
// this prints "0"
NSLog(self.session.delegateQueue.operationCount)
// this returns immediately instead of waiting for task to complete
[self.session.delegateQueue waitUntilAllOperationsAreFinished];

我找到了一个解决方案,使用建议的方法避免使会话无效DispatchGroup.

(答案在 Swift 中,而问题在 ObjC 中......但逻辑相同)

使用时请注意,uploadTaskWithStreamedRequest:,我们需要实施一个URLSessionTaskDelegate and func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?)。因此,为了简化答案,我将演示如何使用DispatchGroup with uploadTaskWithRequest:from:completionHandler:.

// strong reference to the dispatch group
let dispatchGroup = DispatchGroup()

func performManyThings() {
    for _ in 1...3 {
        let request = URLRequest(url: URL(string: "http://example.com")!)
        dispatchGroup.enter()
        let uploadTask = self.session.uploadTask(with: request, from: nil) { [weak self] _, _, _ in
            self?.dispatchGroup.leave()
        }
        uploadTask.resume()
    }
    dispatchGroup.notify(queue: .main) {
        // here, all the tasks are completed
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何等待 NSURLSession 的所有任务完成? 的相关文章

  • 应用程序未安装:此应用程序仍处于开发模式

    我已按照此处的说明进行操作 该应用程序的开发人员尚未正确设置该应用程序以进行 Facebook 登录 https stackoverflow com questions 21329250 the developers of this app
  • 截取 UIImageView 的屏幕截图我只需要图像 IOS

    在我的 IOS 应用程序中 我正在截取 UIImageView 的屏幕截图 如附件照片所示 非常完美 但在这里 我采取了UIImageView content mode 方面适合 我用过这个代码 func captureView gt UI
  • iOS自动布局:如何动态均匀地间隔项目?

    我需要均匀地间隔 X 个项目 并且项目的容器可以具有动态宽度 并且我希望第一个和最后一个项目粘在左边缘和右边缘 0 item1 itemX 0 这样无论容器有多宽 项目总是均匀分布 如何在布局约束下实现这一点 编辑 我在想 如果我可以将 i
  • 如何用SKAction循环播放音乐?

    我想用 SKAction 循环背景音乐 但当我切换到另一个场景时 音乐在一行后停止 有没有办法开始循环并在不同的场景中继续播放 现在代码放置在 MyScene 的 init 方法中 这是正确的位置吗 也许 didFinishLaunchin
  • 核心数据插入具有现有关系的新数据

    我的核心数据有问题 我有一个看起来像这样的表 用户 与 机架 与 机架项目的关系 我应该如何将新对象插入到具有用户中现有项目对象和现有机架对象的机架项目中 我尝试获取现有对象 predicate NSPredicate predicateW
  • iOS 按钮在动画期间不可点击

    当我使用类别方法向按钮添加动画时 我无法单击该按钮 似乎它已被禁用 compassCalibrateButton pulse 1 5 continuously YES compassCalibrateButton userInteracti
  • cordova添加平台android和iOs后并不总是添加插件

    我需要跑ionic platform add android iOs几次就能得到想要的结果 有时插件会在第一次运行后添加 但通常我必须清除插件和平台目录并重新运行添加平台循环几次 直到所有插件都添加到 android 文件夹中 其他人是否遇
  • Xcode 4 单元测试链接器错误

    注意 使用 GHUnit 不是此问题的可接受答案 我知道大多数人认为 GHUnit 比 Xcode4 OCUnit 更好 但这不是我要问的 我将单独评估 我有一个在 Xcode4 中从头开始创建的 Xcode 项目 在创建过程中选中了 包含
  • iOS 人脸检测器方向和 CIImage 方向设置

    EDIT发现此代码有助于处理前置摄像头图像http blog logichigh com 2008 06 05 uiimage fix http blog logichigh com 2008 06 05 uiimage fix 希望其他人
  • UIAutomation 无法加载插件

    我设置了一个项目 其中一个目标在构建过程完成时启动 UIAutomation Instruments 是从 Python 脚本启动的 该脚本最终在 bash 上调用通常的 xcrun Instruments 命令 它工作了很长一段时间 没有
  • iOS 键盘颜色变化 - 键盘外观深色不粘

    在我们的应用程序中 我们将键盘外观设置为深色 正如预期的那样 这会产生一个黑色键盘 但是 如果显示键盘 并且我们按主页按钮 然后返回应用程序 键盘会变成白色 如图所示 有什么想法吗 这可能与键盘是全局对象这一事实有关 在任何给定时间 内存中
  • 我们如何使用 swift 在 UITableView 部分标题中添加图像?

    在我的 willDisplayHeaderView 中 我更改了节标题的颜色 但我想在节标题之前添加图像 有什么帮助吗 我的 willDisplayHeaderView 代码是 func tableView tableView UITabl
  • Appium:能否用于跨平台应用程序测试

    我有一个使用跨平台开发工具开发的应用程序 该应用程序对于 ios ipa 和 android apk 具有相同的界面 我可以编写一个自动化脚本并在两个平台上运行它 即 Android 和 iOS 应用程序吗 有人用 Appium 尝试过吗
  • 以编程方式获取 Storyboard ID?

    尝试查看 UIViewController 或 UIView 是否可以识别其 Storyboard ID 所以希望 UIViewController aViewController NSString storyboardID aViewCo
  • sizeWithFont:constrainedToSize:lineBreakMode:不准确?

    sizeWithFont constrainedToSize lineBreakMode 似乎没有给我返回正确的宽度 执行这些代码后 我看到标签中的部分字符串被切断 这意味着我必须手动添加一些像素到大小 我错过了什么吗 我有一个 UILab
  • 如何在 Objective-C 中运行时查找字符串常量?

    我的公司开发了一个广告 SDK 可以协调其他广告网络 在运行时 它通过使用检查其他广告网络是否存在NSClassFromString 并发送这些类消息 如果存在 这对于 Objective C 对象来说效果很好 但是如何在运行时加载字符串常
  • iOS:将 ISO Alpha 2 转换为 Alpha 3 国家/地区代码

    是否可以在 iOS 中将 ISO 3166 alpha 2 国家 地区代码转换为 alpha 3 国家 地区代码 例如 DE 转换为 DEU 基于 Franck 的答案 这里是用于加载 plist 的代码 swift4 然后转换 3 个字母
  • 在特定点停止 CABasicAnimation

    我正在使用创建的旋转动画CABasicAnimation 它旋转一个UIView超过2秒 但我需要能够阻止它UIView被感动了 如果我删除动画 视图将处于与动画开始之前相同的位置 这是我的动画代码 float duration 2 0 f
  • iOS 7,搜索模式下范围栏变黑

    我使用嵌入到 UiTableViewController 的 UISearchDisplayController 在我的表格视图中创建一个搜索栏 但是 如果我设置搜索栏的背景图像 则范围栏不会在搜索模式下显示 而是显示黑条 这很奇怪 因为它
  • 为什么UICollectionViewCell的outlet为nil?

    我在 Interface Builder 中创建了一个自定义 UICollectionViewCell 将其上的视图绑定到类 然后当我想使用字符串并将其设置为字符串上的标签时 该标签具有 nil 值 override func viewDi

随机推荐

  • 如何将新数据附加到属性文件中的现有数据?

    我正在使用以下代码将数据写入属性文件 public void WritePropertiesFile String key String data Properties configProperty new Properties confi
  • JavaScript 路由正则表达式

    我需要构建一个路由器 将 REST 请求路由到正确的控制器和操作 这里有一些例子 POST users GET users uid GET users search q lol GET users GET users uid picture
  • 从 PHP Curl 获取 POST Zapier Webhook 响应

    我正在使用 Zapier Webhooks 来集成 Web 门户和 API 门户网站和 API 都是使用 php 开发的 我正在使用curl向Zapier中的catch hook发送请求 发送发布数据 然后在我的 zap 中 第二步获取捕获
  • 使用 msmq 进行异步日志记录

    我需要在我们的应用程序中进行日志记录 并希望尽可能少地保留因日志记录而消耗的时间 我正在考虑使用 MSMQ 以便应用程序登录到 MSMQ 然后我可以将消息从 MSMQ 异步记录到数据库 文件 这个想法在性能方面好吗 或者使用 log4net
  • 如何执行命令提示符并从中获取输出?

    我是Python的新手 我想编写一个Python程序 可以在cmd中执行一些命令并自动从中获取输出 是否可以 我怎样才能做到这一点 你会想要使用subprocess Popen https docs python org 3 4 libra
  • 使用 Jest 模拟的服务会导致“不允许 jest.mock() 的模块工厂引用任何超出范围的变量”错误

    我正在尝试模拟对服务的调用 但我正在努力处理以下消息 模组厂jest mock 不允许引用任何超出范围的变量 我正在使用 babel 和 ES6 语法 笑话和酶 我有一个简单的组件叫做Vocabulary它得到一个列表VocabularyE
  • Lambda 不会触发 SNS 事件。将 AWS lambda 与 SNS 链接起来

    我使用 AWS 将 lambda 链接在一起 方法是让第二个 lambda 订阅第一个 lambda 的 SNS feed 第二个 lambda 没有从第一个 lambda 接收任何内容 并且我在 CloudWatch 或我订阅的个人电子邮
  • 是否可以在 Vista 上构建 exe 并使用 py2exe 在 XP 上部署

    我在 Windows Vista 上使用 python 创建了一些程序 但我想将它部署在 Windows XP 上 是否有必要在Windows XP上进行新的构建 或者是否有可能构建在这两个系统上都可以运行的版本 编辑 编辑2 非常简单的程
  • 在 DataSources.groovy 中扩展多个 grails 数据源?

    您定义的每个环境DataSource groovy扩展基础dataSource定义位于文件根部 环境之外 我有两个特定的配置 需要将它们应用于许多不同的环境 这些环境具有较小的特定于环境的更改 实际上 我需要两个 基本定义 或者某种方式来扩
  • Tortoise-ORM:如何从 tortoise.contrib.postgres.fields 查询 Postgres `ArrayField`

    刚刚创建了一个 PostgresArrayField在 Tortoise ORM 中通过from tortoise contrib postgres fields import ArrayField托管一些我想放置的标签 查看我的 Post
  • .ps1 脚本在 .bat 文件脚本中报告为“缺少结束符 '}'”

    我在将简短的 PowerShell 脚本转换为 cmd exe bat 文件脚本时遇到困难 错误消息 见下文 抱怨 缺少结束 ps1 脚本按预期成功运行 我在赋值语句末尾使用了分号字符 我用脱字符号 转义了垂直线 竖线 字符 我缺少什么 这
  • 片段不会启动

    我有 onclicklistener 可以工作 我正在尝试通过单击列表视图上的按钮启动一个新片段 目前 该片段尚未启动 但是 我们使用的模拟器不会崩溃 因此如果我们正确理解这一点 它就不会连接到新的片段 XML 页面 public void
  • 在 Chart.js 中的条形顶部显示值

    请参考这个小提琴 https jsfiddle net 4mxhogmd 1 https jsfiddle net 4mxhogmd 1 我正在研究 Chart js 如果您在小提琴中看到 您会注意到在某些情况下条形顶部的值未正确显示 超出
  • 我可以在 contentful-client 中使用“useSWR”来创建分页吗?

    我正在尝试使用 nextjs 和 useSWR 挂钩创建分页 这就是我目前的做法 它似乎正在工作 但是我在文档中读到 作为第一个参数传递的密钥应该是一个唯一的字符串 通常是一个 URL 我只是传递索引来获取正确的数据 我的方法会扰乱缓存吗
  • iOS:检测或禁用多个图像选择

    我们有一个带有图像附件控件的 UIWebview 当用户点击该控件时 会弹出一个 iOS 操作表 当用户点击 浏览 或 照片库 时 用户可以选择多个图像 然后我拦截 void imagePickerController didFinishP
  • Rails 5.2 加密凭证不保存

    当我做bin rails credentials edit我的编辑器打开一个文件 例如credentials yml enc 1234与默认内容 完成编辑后 我点击保存 控制台显示New credentials encrypted and
  • Chrome 新版本 73.0.3683.75 的 Ajax 调用错误?

    我的代码在 Chrome 更新之前运行良好 我向我的服务器发出 ajax 调用 我的服务器收到调用 将 JSON 返回给客户端 但答案始终为空 当我查看 Fiddler 时 我从服务器得到了答案 我尝试使用 JQuery 还尝试使用 xml
  • 使用 TCHAR 时出错,无法转换为 wchar_t

    我被要求向现有的旧项目添加功能 但我无法构建它 它处理 unicode 字符串 但我在使用 TCHAR 时遇到很多错误 具体来说 几乎每个错误都是 TCHAR 无法转换为或用作 wchar t 从我在许多不同的文章中看到的内容来看 我尝试使
  • iOS 块和对 self 的强/弱引用

    我有一个关于 iOS 中块中对 self 的强引用和弱引用的问题 我知道在块内引用 self 的正确方法是在块外创建一个弱引用 然后在块内创建对该弱引用的强引用 如下所示 weak typeof self weakSelf self dis
  • 如何等待 NSURLSession 的所有任务完成?

    Why is NSURLSession创建并恢复 NSURLSessionTask 后操作队列为空 有没有办法判断 NSURLSession 是否有待处理的任务 目标是等待多个任务完成 但这不起作用 NSURLSessionUploadTa