AFNetworking 和批处理/串行操作

Posted

技术标签:

【中文标题】AFNetworking 和批处理/串行操作【英文标题】:AFNetworking and Batched/Serial Operations 【发布时间】:2012-12-29 08:27:03 【问题描述】:

我正在尝试使用AFNetworking 进行一系列网络操作。例如:

[SomeApiICreated doNetworkingStuff success:^(NSString *message)
                           
                             NSLog(@"Yay!");
                           
                           failure:^(NSError *error)
                           
                             NSLog(@"Oh noes!");
                           ];

现在在 doNetworkingStuff 中,我想做多个网络任务。例如

    获取应用令牌 if (appTokenGot) step3 else callFailure 使用应用令牌获取内容列表 if (listGot) step5 else callFailure

但我还想打电话给doNetworkingStuff2,它只执行第 3 步及以上步骤,基本上让我在需要时将操作排队,混合和匹配它们等。但所有这些都是我的一个主要调用可以说“是的,这行得通”或“有问题”

NSOperationQueue 是正确的,还是“如果这样,那么这样”的嵌套函数阻止了最好的方法?

任何示例也会有所帮助。

【问题讨论】:

【参考方案1】:

为什么不直接调用其他函数从成功/失败块中传递数据。例如,我在 App.net API 中使用了类似的东西。

[[KSADNAPIClient sharedAPI] postPath:@"stream/0/posts"
                              parameters:params
                                 success:^(AFHTTPRequestOperation *operation, id responseObject)
     
         [[KSPostsController sharedController] addPosts:responseObject];
     
                                 failure:^(AFHTTPRequestOperation *operation, NSError *error)
     
         if (block) 
             block([NSArray array], error);
         
     ];

这样我就不会在成功和失败块中堆积大量逻辑。

【讨论】:

【参考方案2】:

AFAIK,最好的方法是使用完成回调来执行连续调用。请记住,您需要响应对象来执行后续步骤,因此您将在成功回调中接收此对象。

【讨论】:

以上是关于AFNetworking 和批处理/串行操作的主要内容,如果未能解决你的问题,请参考以下文章

AFNetWorking3.0 处理请求头 和 请求内容

IOS AFN (第三方请求)

iOS开发之AFN的基本使用

AFN3.0封装

AFN2.0到3.0的迁移

AFNetworking 3.0 使用详解 和 源码解析实现原理