将AFNetworking 2.0与后台任务配合使用

时间:2014-10-19 18:15:20

标签: ios afnetworking afnetworking-2

我在使用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支持后台任务?

1 个答案:

答案 0 :(得分:2)

正确的做法是,您无法实例化新的AFHTTPSessionManager,然后将其session更改为引用某些单身NSURLSession。因此,您应该将AFHTTPSessionManager对象本身设置为可以在整个应用程序中重复使用的共享实例。

end of this answer,我提供了一个使用AFNetworking进行后台会话的示例。