Swift:“后台会话不支持完成处理程序块。请改为使用代表。

2024-03-18

我是 Swift 新手,因此经验不是很丰富。我不知道为什么这不起作用。

我正在尝试下载音乐文件,然后将其发送到 AVAudoPlayer 进行播放。

这是代码:

@IBAction func startDownload(_ sender: Any) {
    weak var weakSelf = self
    let url = URL(string: "http://www.noiseaddicts.com/samples_1w72b820/280.mp3")!
    let task = DownloadManager.shared.activate().downloadTask(with: url as URL, completionHandler: { (URL, response, error) -> Void in

        print("URL = \(URL)")

        weakSelf!.plays(url: URL! as URL)

    })
    task.resume()
}

我收到的错误是:

DownloadTaskExample[31140:1527666] *** 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“后台会话中不支持完成处理程序块。请改为使用代表。

*** 首先抛出调用堆栈: ( 0 核心基础 0x0000000110bbf34b异常预处理 + 171 1 libobjc.A.dylib 0x000000010db2f21e objc_异常_抛出 + 48 2 CFNetwork 0x00000001111ada2c -[__NSURLBackgroundSession validateSerializabilityForRequest:完成:] + 172 3 CFNetwork 0x00000001111b035c -[__NSURLBackgroundSession _onqueue_downloadTaskForRequest:resumeData:完成:] + 36 4 CFNetwork 0x00000001111af37c __90-[__NSURLBackgroundSession downloadTaskForRequest:downloadFilePath:resumeData:completion:]_block_invoke + 38 5 CFNetwork 0x00000001111adddb __68-[__NSURLBackgroundSession PerformBlockOnQueueAndRethrowExceptions:]_block_invoke + 67 6 libdispatch.dylib 0x0000000111aa00cd _dispatch_client_callout + 8 7 libdispatch.dylib 0x0000000111a7d30a _dispatch_barrier_sync_f_invoke + 340 8 CFNetwork 0x00000001111add44 -[__NSURLBackgroundSession PerformBlockOnQueueAndRethrowExceptions:] + 174 9 CFNetwork 0x00000001111af2e5 -[__NSURLBackgroundSession downloadTaskForRequest:downloadFilePath:resumeData:completion:] + 243 10 下载任务示例 0x000000010d54086d _TFC19DownloadTaskExample14ViewController13startDownloadfP_T_ + 525 11 下载任务示例 0x000000010d540e33 _TToFC19DownloadTaskExample14ViewController13startDownloadfP_T_ + 67 12 UIKit 0x000000010e3685b8 -[UIApplication sendAction:to:from:forEvent:] + 83 13 UIKit 0x000000010e4ededd -[UIControl sendAction:to:forEvent:] + 67 14 UIKit 0x000000010e4ee1f6 -[UIControl _sendActionsForEvents:withEvent:] + 444 15 UIKit 0x000000010e4ed0f2 -[UIControl TouchsEnded:withEvent:] + 668 16 UIKit 0x000000010e3d5ce1 - [UIWindow _sendTouchesForEvent:] + 2747 17 UIKit 0x000000010e3d73cf - [UIWindow发送事件:] + 4011 18 UIKit 0x000000010e38463f - [UIApplication发送事件:] + 371 19 UIKit 0x000000010eb7671d __dispatchPreprocessedEventFromEventQueue + 3248 20 UIKit 0x000000010eb6f3c7 __handleEventQueue + 4879 21 核心基础 0x0000000110b64311 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION+ 17 22 核心基础 0x0000000110b4959c __CFRunLoopDoSources0 + 556 23 核心基础 0x0000000110b48a86 __CFRunLoopRun + 918 24 核心基础 0x0000000110b48494 CFRunLoopRunSpecific + 420 25 图形服务 0x000000011444da6f GSEventRunModal + 161 26 UIKit 0x000000010e366964 UIApplicationMain + 159 27 下载任务示例 0x000000010d54597f main + 111 28 libdyld.dylib 0x0000000111aec68d 开始 + 1 29 ??? 0x0000000000000001 0x0 + 1 )

libc++abi.dylib:以 NSException 类型的未捕获异常终止

请有人帮助我,以便文件下载后将其传递到plays功能,这样我就可以玩它:)

P.s 这是我正在使用的下载管理器:https://www.ralfebert.de/snippets/ios/urlsession-background-downloads/ https://www.ralfebert.de/snippets/ios/urlsession-background-downloads/


这告诉你的是

  1. 当你创建你的URLSession,您使用了后台配置对象,即background(withIdentifier:)方法上URLSessionConfiguration.
  2. 您开始下载,并带有完成块。
  3. 这是不允许的。

不允许这样做的原因是,对于后台下载,下载完成时您的应用程序可能不会运行,但 iOS 想要唤醒您的应用程序以告诉它下载已完成。一旦您的应用程序停止运行,该完成块将不存在,因此这不是获取该通知的有效方法。

您有几个选择:

  • 您可以停止使用后台会话。就像是URLSessionConfiguration.default。但没有后台下载。
  • 您可以删除回调并使用中声明的方法URLSessionDelegate获取下载结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift:“后台会话不支持完成处理程序块。请改为使用代表。 的相关文章

  • 无法在 Swift 中创建文件路径

    我尝试在 Swift 中打开该文件 为此 我创建了文件路径 这不起作用 maaaacy pwd Users tsypa maaaacy cat a txt test maaaacy a swift nil maaaacy 剧本 usr bi
  • 启动使用 Simperium 的应用程序时 objectFromJSONString 崩溃

    我得到了一个JSON当我尝试启动使用 Simperium 框架的应用程序时崩溃 NSCFString objectFromJSONString unrecognized selector sent to instance 0x6c561a0
  • Carthage 更新错误:“GitHub API 请求失败:凭据错误”

    这是我的购物车文件 Kanna HTML parsing library github tid kijyun Kanna gt 1 0 0 Realm database ORM github realm realm cocoa 当我跑步时c
  • 了解 React Native 中的默认字体大小

    在过去的几个月里 我一直在开发一个 React Native 应用程序 但有些事情总是让我困惑 而我现在正试图弄清楚它的真相 我正在尝试标准化应用程序中的字体大小 正文 标题等 并且正在努力了解 React Native 究竟从哪里获取默认
  • 如何从 Xib 文件加载自定义 UITableViewCell?

    问题很简单 如何加载自定义UITableViewCell来自 Xib 文件 这样做可以让您使用 Interface Builder 来设计您的单元 由于内存管理问题 答案显然并不简单 这个线程 https stackoverflow com
  • 将 Xcode 4.5 新 XIB 文件恢复到 iOS<6

    我已经安装了Xcode 4 5 with iOS6 SDK以及其他用于测试目的的旧 SDK 从 4 3 到 6 0 很美 但是有一个BIG问题 生成一个新的 XIB 文件以兼容 iOS6 这是一个问题 因为我的应用程序需要运行在旧设备 不只
  • 使用 Swift 创建 NSAlert

    我有在 Objective C 中创建和 NSAlert 的代码 但我现在想在 Swift 中创建它 该警报旨在确认用户想要删除文档 我想要 删除 按钮来运行删除功能 而 取消 按钮只是为了消除警报 我怎样才能用 Swift 写这个 NSA
  • 在 Firebase 中为 TextView Swift 保存字体和大小的方法是什么

    我想在 Firebase 中保存 Swift 中 TextView 的字体 大小和对齐方式 这样我就可以在另一个视图中调用它 我只能将颜色保存在 Firebase 中 这是显示我是如何做到的的代码 IBAction func SendBtn
  • 具有透明背景的 Swift 模态视图控制器 [重复]

    这个问题在这里已经有答案了 我知道这个话题很受欢迎 但我在编程语言中遇到了一些问题 事实是我仍然不明白我把代码放在哪里 好吧 我就来说说整个案子 我正在尝试制作一个与正常情况稍有不同的模态 Swift 通过单击按钮 ViewControll
  • Apple 针对 http 直播流媒体应用程序的政策

    这里有要求 http developer apple com library ios documentation NetworkingInternet Conceptual StreamingMediaGuide UsingHTTPLive
  • Swift 3 中数组的 indexOf(_:) 方法的替换

    在我的项目 用 Swift 3 编写 中 我想使用从数组中检索元素的索引indexOf 方法 存在于 Swift 2 2 中 但我找不到任何替代方法 Swift 3 中是否有任何好的替代方法或类似的方法 Update 我忘记提及我想在自定义
  • 如何将数据从一个视图传递到下一个视图?

    我正在制作一个下载排队系统来下载视频 处理下载的排队代码位于另一个视图控制器中 现在我的问题是如何将下载的 URL 传递到另一个视图而不推送到另一个视图控制器 如下所示 ViewConntroller View ViewConntrolle
  • 如何将 CIFilter 输出到相机视图?

    我刚刚开始使用 Objective C 我正在尝试创建一个简单的应用程序 它显示带有模糊效果的相机视图 我得到了与 AVFoundation 框架一起使用的相机输出 现在 我正在尝试连接 Core 图像框架 但不知道如何连接 Apple 文
  • 如何在 swift 中以编程方式使用坐标打开地图应用程序?

    我想在地图应用程序中打开纬度和经度 我尝试了这段代码HERE https stackoverflow com questions 12504294 programmatically open maps app in ios 6 func g
  • IOS 上图像的加密/解密

    我们正在使用加密 解密和 UIIMAGE 如果我们加密和解密 UIIMAge 而不保存到 iphone 画廊中 它工作正常 但如果我们加密 保存到画廊中 将 加密的图像 加载到应用程序中 然后解密它效果不好 我们使用这个函数来加密 解密 保
  • 禁用 iPhone 4S / 新 iPad 键盘上的听写按钮

    我们的应用程序是一个医疗保健应用程序 我们的应用程序中有一个符合 HIPAA 标准的语音识别器 所有听写都可以通过它进行 医院不希望医生意外开始与不符合 HIPAA 标准的 Nuance Dragon 服务器进行对话 因此 我正在寻找可以抑
  • GoogleSignIn ios 附加到谷歌表格

    我目前正在开发一个 iOS 应用程序 该应用程序需要写入登录用户拥有的 Google 工作表 要登录我正在使用的用户GoogleSignInpod 并附加到我正在使用的谷歌表GoogleAPIClientForREST Sheets pod
  • 在completionHandlers中存储值 - Swift

    我正在创建一个completionHandler它返回一个字典 但是当我在另一个类中调用这个方法时 它的值是零 func fetchLatestPosts completionHandler responseDict NSDictionar
  • 弱变量中间为零

    弱变量什么时候变为零 weak var backgroundNode SKSpriteNode texture SKTexture image initialBackgroundImage backgroundNode position C
  • 未捕获的 Kotlin 异常:kotlin.native.In CorrectDereferenceException:非法尝试访问非共享

    我尝试使用 Kotlin MPP Multiplatform 开发 Android 和 iOS 之间的共享库 但我面临着 iOS 中线程的问题 对于我在 iOS 中的应用程序 我在主线程中建立了对象 但它可能调用其他线程中的函数并抛出此异常

随机推荐