我得到了一个
错误域= NSURLErrorDomain代码= -997“与后台传输服务失去连接”
当我在开始后台下载过程后锁定我的屏幕时。我正在使用Alamofire,但我认为这也会发生在常规的URLSession上。如果我软关闭应用程序,下载继续工作,但一旦我锁定我的设备,它就开始抛出此错误。
这是代码的相关部分:
private(set) lazy var alamoSessionManager: SessionManager = {
let config = URLSessionConfiguration.background(withIdentifier: "MySession")
config.isDiscretionary = true
config.sessionSendsLaunchEvents = true
config.shouldUseExtendedBackgroundIdleMode = true
return Alamofire.SessionManager(configuration: config)
}()
let route = buildRouter()
alamoSessionManager.request(url, method: route.method, parameters: route.parameters, encoding: JSONEncoding.default, headers: route.headers)
我查看了控制台,看看是否有任何守护进程崩溃但找不到任何守护进程。锁定屏幕后我立即看到三个错误:
BKLogEvent:找不到CombinedSequence属性
任务<>。<48>完成错误 - 代码:-999
任务<>。<48>加载失败并显示错误错误域= NSURLErrorDomain代码= -997“与后台传输服务失去连接”UserInfo = {NSErrorFailingURLStringKey =,NSErrorFailingURLKey =,_ NSURLErrorRelatedURLSessionTaskErrorKey =,_ NSURLErrorFailingURLSessionTaskErrorKey =,NSLocalizedDescription =与后台传输服务失去连接} [-997]
error._userInfo是这样的:
▿ Optional<AnyObject>
▿ some : 5 elements
▿ 0 : 2 elements
- key : NSErrorFailingURLStringKey
- value : https://www.myweb.com/api
▿ 1 : 2 elements
- key : NSErrorFailingURLKey
- value : https://www.myweb.com/api
▿ 2 : 2 elements
- key : _NSURLErrorRelatedURLSessionTaskErrorKey
▿ value : 2 elements
- 0 : BackgroundDataTask <C39E-2FC73>.<27>
- 1 : LocalDataTask <C39E-2FC73>.<27>
▿ 3 : 2 elements
- key : _NSURLErrorFailingURLSessionTaskErrorKey
- value : BackgroundDataTask <C39E-2FC73>.<27>
▿ 4 : 2 elements
- key : NSLocalizedDescription
- value : Lost connection to background transfer service
Alamofire目前与背景会话并不真正兼容,原因是由于无法坚持并重新连接其封闭API,以及当invalidateAndCancel()
URLSession
时它是deinit
。我们建议您直接使用URLSession
进行后台会话,或者将前台会话与后台任务API一起使用。
正确检查iOS文档,alamoSessionManager.request
将无法在后台运行,只有alamoSessionManager.download
和alamoSessionManager.upload
才有效。
当您使用alamoSessionManager.download
时,JSON响应将被下载并保存在tmp文件中。确保移动到永久位置并读取文件并将其转换为JSONDecoder
对象。如果您不清楚,请告诉我。