![](/img/trans.png)
[英]iOS - Completion handler blocks are not supported in background sessions. Use a delegate instead
[英]Swift: 'Completion handler blocks are not supported in background sessions. Use a delegate instead.'
我是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 CoreFoundation 0x0000000110bbf34b exceptionPreprocess + 171 1 libobjc.A.dylib 0x000000010db2f21e objc_exception_throw + 48 2 CFNetwork 0x00000001111ada2c-[__ NSURLBackgroundSession validateSerializabilityForRequest:completion:] + 172NS CFresponse :: ] + 36 4 CFNetwork的0x00000001111af37c __90 - [__ NSURLBackgroundSession downloadTaskForRequest:downloadFilePath:resumeData:完成:] _ 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 DownloadTaskExample 0x000000010d54086d _TFC19DownloadTaskExample14ViewController13startDownloadfP_T_ + 525 11 DownloadTaskExample 0x000000010d540e33 _TToFC19DownloadTaskExample14ViewController13startDownloadfP_T_ + 67 12 UIKit 0x000000010e3685b8-[UI從發送到控制:對於[UIApplication sendAction :: to:Control toEvent:] 67 14 UIKit 0x000000010e4ee1f6-[UIControl _sendActionsForEvents:withEvent:] + 444 15 UIKit 0x000000010e4ed0f2-[UIControl touchesEnded:withEvent:] + 668 16 UIKit 0x000000010e3d5ce1-[UIWindow _sendTouchesForEvent:] + 2747 17 UIKit 0x000000010e38463f-[UIApplication sendEvent:] + 371 19 UIKit 0x000000010eb7671d __dispatchPreprocessedEventFromEventQueue + 3248 20 UIKit 0x000000010eb6f3c7 __handleEventQueue + 4879 21 CoreFoundation 0x0000000110b64311 __CFRUNLOOP_IS_CALLINGSOUT_FACE_FUNCTION_FUNCTION_FUNCTION_FUNCTION b4959c __CFRunLoopDoSources0 + 556 23 CoreFoundation 0x0000000110b48a86 __CFRunLoopRun + 918 24 CoreFoundation 0x0000000110b48494 CFRunLoopRunSpecific + 420 25 GraphicsServices 0x000000011444da6f GSEventRunModal + 161 26 UIKit 0x000000010e366dy dydy 0x0000000111dy dydy dydy 0x00000001011366dy dydy 0 1 0 000000000000011d dydy 1 2 dydy 0 1 0 0 00000000 0 1 0 1 0 0 ddy 0 0 0 00000000 0 0 0 0 00000000000001 1 1 0 1 0 6 ddy 0 0 00000000 0 0 0 0 00000000000001 1 1 1 2 1 1 1d 0x0000000000000001 0x0 +1)
libc ++ abi.dylib:以類型為NSException的未捕獲異常終止
請有人幫助我,以便一旦下載文件,它就會傳遞到plays函數,這樣我就可以播放了:)
ps這是我正在使用的DownloadManager: https : //www.ralfebert.de/snippets/ios/urlsession-background-downloads/
這告訴你的是
URLSession
,您使用的后台配置對象,即,與background(withIdentifier:)
方法上URLSessionConfiguration
。 不允許這樣做的原因是,在進行后台下載時,下載完成后您的應用可能無法運行,但是iOS希望喚醒您的應用以告知下載已完成。 一旦您的應用停止運行,該完成塊將不存在,因此這不是獲取該通知的有效方法。
您有兩種選擇:
URLSessionConfiguration.default
。 不過,沒有后台下載。 URLSessionDelegate
聲明的方法來獲取下載結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.