【问题标题】:Using AFNetworking 2.0 with background tasks使用 AFNetworking 2.0 处理后台任务
【发布时间】:2014-10-19 18:15:19
【问题描述】:

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

当我运行我的应用程序时,第一个请求正常发送,但第二个请求返回 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 属性设置为只读,我无法传递自定义 NSURLSession,只有一个 NSURLSessionConfiguration,它是在 AFURLSessionManager:init 内部创建的:

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

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

【问题讨论】:

    标签: ios afnetworking afnetworking-2


    【解决方案1】:

    你不能实例化一个新的AFHTTPSessionManager然后改变它的session来引用一些单例NSURLSession是正确的。因此,您应该将 AFHTTPSessionManager 对象本身设置为可以在整个应用程序中重用的共享实例。

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

    【讨论】:

    • 我想你可以,但除非有迫切的需要,否则我不会打扰。对我来说感觉像是过早的优化......
    • 后期评论:我的应用程序使用共享的AFHTTPSessionManager 对象定期下载(用户提示),我想添加后台更新。我应该为此创建另一个AFHTTPSessionManager 吗?或者是否可以即时更改NSURLSessionConfiguration
    • 是的,您需要单独的AFHTTPSessionManager(或AFURLSessionManager)。您不能即时更改configuration
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多