我得到
Error Domain = 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]
错误。_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
答案 0 :(得分:0)
Alamofire目前无法与后台会话完全兼容,这是由于无法持久保存并重新连接其关闭API,以及invalidateAndCancel()
URLSession
是{ {1}} d。我们建议您直接将deinit
用于后台会话,或将后台会话API与前台会话一起使用。
答案 1 :(得分:0)
正确检查iOS文档,alamoSessionManager.request
在后台不起作用,仅alamoSessionManager.download
和alamoSessionManager.upload
将起作用。
使用alamoSessionManager.download
时,将下载JSON响应并将其保存在tmp文件中。确保移至永久位置并读取文件并将其转换为JSONDecoder
对象。如果您不清楚,请告诉我。