如何等待 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 的所有任务完成? 的相关文章

  • 自定义 URL 方案不是 Outlook 中的链接 (iOS/Android)

    我们的应用程序可以使用自定义 URL 方案启动 例如myapp mainpage param 123 当它作为链接包含在网页中时 此功能有效 而且 在 iOS 上 它可以在平台附带的邮件客户端中运行 用户注册并安装该应用程序后 他会收到一封
  • 如何在 Swift 3 iOS 10 中创建自定义相册

    这听起来可能是重复的 但经过搜索 我仍然没有得到 Swift 3 的预期答案 当我尝试使用添加资产时为资产创建占位符后addAssets 方法 Xcode 建议我将 assetPlacehoder 转换为 FastEnumeration 类
  • Phonegap - navigator.app.backHistory() 不适用于 HTML 后退按钮

    在我的应用程序中 我使用phonegap 2 6 对于后退按钮 我使用以下函数 document addEventListener backbutton onBackKeyDown false function onBackKeyDown
  • 添加到 Xcode App 时,Bazel 框架抛出“无法检查应用程序包”

    我正在使用 Bazel 构建基于 MediaPipe 的人脸识别库 我正在使用apple xc框架 https github com bazelbuild rules apple blob master doc rules apple md
  • 错误 ITMS-90207 Apple Store 提交

    当我在模拟器或设备上运行我的应用程序时 用于调试和发布构建配置 它可以完美运行 但是当我尝试将我的应用程序提交到 Apple Store 时 出现以下错误 错误 ITMS 90207 捆绑包无效 APPNAME app 处的捆绑包确实 不包
  • 图表的集合视图呈现:图表 cocoapods 的“没有可用的图表数据”

    我正在编码GraphViewController包含图形数组的类 类型为LineChartView 但是 当我尝试以集合视图的单元格格式显示这些图形时 使用调用的类GraphCell the LineChartView对象似乎没有加载任何数
  • GCD 和线程

    我想了解一些有关 GCD 和线程的知识 我的视图控制器中有一个 for 循环 它要求我的模型执行一些异步网络请求 因此 如果循环运行 5 次 模型将发出 5 个网络请求 考虑到我正在使用 NSURLConnection 的 sendAsyn
  • Emoji 字符无法编码为 JSON

    我有一个UITextView我称之为messageField 其中的数据messageField is POST ed 以 JSON 格式发送到服务器 当用户输入表情符号字符时 我无法将数据编码为JSON 我认为 Emoji 使用 Unic
  • 如何通过填充 NSDictionary 以 JSON 格式发送 UIImage

    我正在尝试使用 JSON 将数据发送到服务器 我可以使用我的对象和关键参数创建 NSDictionary 但我想发送我的图片 图片是UIImage NSDictionary mainJSON NSDictionary dictionaryW
  • UITableViewCell 的 viewDidAppear

    我通常使用viewDidAppear方法在视图完成出现后在视图上执行一些 UI 操作 我在各种情况下使用了此方法 它非常有用 但是 我需要在视图上进行一些 UI 更改UITableViewCell当它完成出现后 SDK中是否有任何可用的方法
  • 什么是已弃用的推送转场? (iOS 8)[重复]

    这个问题在这里已经有答案了 我不知道在这种情况下已弃用意味着什么 我是编程新手 正在 Xcode 6 中制作我的前几个应用程序 今天我正在制作一个待办事项列表应用程序 当连接到用户可以输入新待办事项以添加到主表的场景时 我被邀请使用推送转场
  • iOS推送通知:当应用程序处于后台时,如何检测用户是否点击了通知?

    关于这个主题有很多 stackoverflow 线程 但我仍然没有找到好的解决方案 如果应用程序不在后台 我可以检查launchOptions UIApplicationLaunchOptionsRemoteNotificationKey
  • 将 C 转换为 Swift:向 UITextField 添加放大镜图标

    如何在左侧添加一个放大镜图标UITextField 我找到了类似问题的答案here https stackoverflow com questions 11811705 where can i get the magnifying glas
  • iOS 自定义滑块删除两端的最小和最大空间

    我正在尝试使用自定义滑块 class MySlider UISlider override func trackRect forBounds bounds CGRect gt CGRect let customBounds CGRect o
  • 如何使用 iOS 可达性

    我正在开发一个使用网络的 iPhone 应用程序 iPhone 通过 HTTP 请求与我的服务器通信 并且应该可以在 WiFi 和 3G 上运行 我目前使用NSURLConnection initWithRequest向我的服务器发送异步请
  • NSCalendar 返回明年第一周上周一的错误日期

    我使用下面的代码使用随机日期来计算上周一 哪个工作文件但我的代码在明年日期中断 下面是相同的代码 NSDate date NSDate dateWithTimeIntervalSince1970 1483620311 228 NSLog c
  • 如何检测 UISwipeGestureRecognizer 的结束?

    来自苹果文档 滑动是一种离散手势 因此每个手势仅发送一次关联的操作消息 void touchesEnded NSSet touches withEvent UIEvent event 当我使用 UISwipeGestureRecognize
  • NSCFData isRessized 崩溃?

    我目前在控制台中收到此崩溃日志 2011 08 23 19 18 40 064 App 1697 707 NSCFData isResizable unrecognized selector sent to instance 0x11f1c
  • 无法从 iOS 中的框架访问 .nib(XIB) 文件

    我已经从现有的代码库中创建了一个框架 并尝试在新的代码库中使用它 这很好用 但是当我尝试访问属于我的框架包的一部分的 nib 文件时 我的应用程序崩溃了 这是我用来访问视图控制器 XIB 文件的代码 testViewController c
  • iOS Safari Mobile 禁用上一个和下一个选择输入

    上周五我发现了关于此问题的类似问题 但似乎无法再次找到它 如果有人能指出我正确的方向 那就太好了 本质上我在一个页面上有多个选择菜单 第一个在加载时填充 第二个在第一个选择时填充 够简单的 但是 在 iOS 设备中 当您点击选择元素时 它会

随机推荐

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

    我正在使用以下代码将数据写入属性文件 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