我在使用AFURLSessionManager实现后台任务时遇到问题。
我使用NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:
并使用便捷方法创建POST请求,使用BaseURL和SessionConfiguration创建新的AFHTTPSessionManager。
当我运行我的应用时,第一个请求会正常发送,但第二个请求会返回A background URLSession with identifier {ID} already exists!
并且会崩溃该应用。
我观看了Apple的WWDC 2013视频,他们建议您只使用
创建一次会话配置dispatch_once(&onceToken, ^{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.yourcompany.appId.BackgroundSession"];
session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
});
然而,AFURLSessionManager的session
属性设置为readonly,我无法传递自定义NSURLSession,只能传递在AFURLSessionManager:init
内创建的NSURLSessionConfiguration:
self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue];
我觉得我做错了什么,但我怎么能用AFNetworking支持后台任务?
答案 0 :(得分:2)
正确的做法是,您无法实例化新的AFHTTPSessionManager
,然后将其session
更改为引用某些单身NSURLSession
。因此,您应该将AFHTTPSessionManager
对象本身设置为可以在整个应用程序中重复使用的共享实例。
在end of this answer,我提供了一个使用AFNetworking进行后台会话的示例。