2014-10-19 62 views
2

我有问题使用AFURLSessionManager实现后台任务。 我正在用BaseURL和SessionConfiguration创建一个新的AFHTTPSessionManager,使用NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:并使用便捷方法创建POST请求。使用AFNetworking 2.0与后台任务

当我运行我的应用程序时,第一个请求会正常发送,但第二个请求会返回A background URLSession with identifier {ID} already exists!,并且会使应用程序崩溃。

我看过苹果的WWDC 2013条的视频,他们建议你创建会话配置只有一次,用

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

然而,有session属性AFURLSessionManager被设置为只读,没有办法,我通过自定义NSURLSession,只有NSURLSessionConfiguration,那就是里面AFURLSessionManager:init创建:

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

我觉得我做错了什么,但我还能怎么支持后台任务使用AFNetworking?

回答

2

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

end of this answer,我提供了一个AFNetworking用于后台会话的例子。

+0

我应该在任何时候调用invalidateAndCancel? – 2014-10-19 21:14:52

+0

我想你可以,但除非有令人信服的需求,否则我不会打扰。感觉像过早优化我... – Rob 2014-10-19 21:42:25

+0

晚评论:我的应用程序使用共享的'AFHTTPSessionManager'对象定期下载(用户提示),我想添加后台更新。我应该为此创建另一个“AFHTTPSessionManager”吗?或者是否可以在运行中更改'NSURLSessionConfiguration'? – Koen 2016-03-24 12:24:23