Using AFNetworking 2.0 with background tasks

I'm having issues implementing background tasks using AFURLSessionManager. I'm creating a new AFHTTPSessionManager with BaseURL and SessionConfiguration, using NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: and using the convenience method to create a POST request.

When I run my app, the first request is sent normally, but the second one returns A background URLSession with identifier {ID} already exists! and it crashes the app.

I've watched Apple's WWDC 2013 videos and they suggest you to create the Session Configuration only once, by using

dispatch_once(&onceToken, ^{
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.yourcompany.appId.BackgroundSession"];
    session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
});

However there session property for AFURLSessionManager is set as readonly and there is no way for me to pass a custom NSURLSession, only a NSURLSessionConfiguration, that is created inside AFURLSessionManager:init :

self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue];

I feel like I'm doing something wrong, but how else can I support background tasks using AFNetworking?


It is correct that you cannot instantiate a new AFHTTPSessionManager and then change its session to reference some singleton NSURLSession . So, instead, you should make the AFHTTPSessionManager object, itself, the shared instance which you can reuse throughout the app.

At the end of this answer, I provide an example of using AFNetworking for background sessions.

链接地址: http://www.djcxy.com/p/96778.html

上一篇: 碰撞问题

下一篇: 使用AFNetworking 2.0和后台任务