【问题标题】:Can AFNetworking handle a queue of requests?AFNetworking 可以处理请求队列吗?
【发布时间】:2014-02-28 06:47:35
【问题描述】:

我在 iOS 6 上的示例:

  • 需要(按顺序)将 10 个多部分请求发送到服务器。 (所以请求形成一个队列)
  • 应该显示进度。
  • 如果一个请求失败,所有后续都应该失败
  • 请求队列应该是可取消的

AFNetworking 可以帮我解决这个问题吗?还是我应该尝试使用 NSOperations 构建一些东西并自己运行循环?

如果我需要在这些请求之间传递上下文数据,例如第一个请求产生的事务 ID。我需要考虑关于线程可见性的任何注意事项吗?

【问题讨论】:

    标签: ios ios7 afnetworking afnetworking-2


    【解决方案1】:

    AFNetworking 可以做到这一点。我建议您使用 AFHTTPRequestOperationManager(它本身使用 NSOperation),而不是 AFHTTPSessionManager。 AFHTTPSessionManager 有很多方法可以做到这一点,但没有一种方法比操作更优雅。

    在幕后,这是您在没有经理的情况下会做的事情:

    您将使用请求序列化程序来生成 NSMutableURLRequest(例如,[AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:];也有类似的 JSON 请求序列化程序)。

    一旦你有一个 URL 请求,使用[AFHTTPRequestOperation -initWithRequest:] 进行操作。您还应该设置它的完成块。

    最后,将您的操作添加到[AFHTTPRequestOperationManager manager].operationQueuestart 它。


    现在您已经了解这基本上是如何协同工作的,这里有一个更简单的方法:

    • 子类AFHTTPRequestOperationManager,如果您不喜欢默认设置,可以选择设置requestSerializer
    • 覆盖(或使用新实现复制)-POST:parameters:constructingBodyWithBlock:success:failure:] - 您想要做的不是立即start 您的操作。
    • 设置 NSOperation 依赖链
    • start第一个

    【讨论】:

    • 所以如果我设置 [AFHTTPRequestOperationManager manager].operationQueue setMaxConcurrentOperationCount:1 我什至不需要 NSOperation 链。
    • 是的,假设您以正确的顺序将它们添加到队列中。
    • 使用 AFNetworking 3.0 时:您需要继承 AFHTTPSessionManager 并且不需要将 MaxConcurrentOperationCount 设置为 1,因为它已经设置为默认值 1。祝你好运。
    • @OhadM 在我的应用程序中需要一次缓存文档,将有 10 个文档。 AFNetworking 3.0如何在没有操作队列的情况下缓存所有文档?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2019-10-17
    • 2016-08-19
    • 2011-02-09
    • 2014-02-19
    • 2014-03-25
    相关资源
    最近更新 更多