添加新的AFHTTPRequestOperation,依赖于现有请求

时间:2015-08-20 11:44:59

标签: ios iphone afnetworking afnetworking-2

使用

发送少量帖子请求
- (AFHTTPRequestOperation *)POST:(NSString *)URLString
                      parameters:(id)parameters
                         success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure

我想在处理完所有上述请求后执行一个get请求,因此我创建了AFHTTPRequestOperation并将依赖项添加为

for (AFHTTPRequestOperation *operation in manager.operationQueue.operations ) {        
        [AFHTTPRequestOperationObject addDependency:operation];
    }
    [manager.operationQueue addOperation: AFHTTPRequestOperationObject];

但是操作是在完成现有的post请求之前执行的。

3 个答案:

答案 0 :(得分:1)

您不应该使用NSOperation依赖项来解决此问题。在您的情况下,以后的操作依赖于使用completionBlock进行处理,但NSOperationQueue和AFNetworking都认为该工作是副作用。

completionBlock是:

  

在操作主要任务完成后执行的块

(我的重点)。

AFHTTPRequestOperation的情况下,"操作的主要任务"是"发出HTTP请求"。 "主要任务" 不包括解析JSON,持久化数据,检查HTTP状态代码等等 - 这些都在completionBlock处理。

要在处理完其他请求后执行一项请求,您需要在完成处理程序中提出该请求,一旦您确认已拥有需要继续执行的所有数据。

答案 1 :(得分:0)

使用ValueFound = TableCollection(RangeHeader.Text) 时,没有必要以与请求相同的顺序接收回复。您必须确保在完成多个extension=pdo.dll extension=pdo_mysql.dll 请求后发出OperationQueues请求。 This解释了使用completionHandler串行执行操作的过程(在您的情况下,应该是GET请求完成后要执行的POST请求。)

答案 2 :(得分:0)

AFHTTPRequestOperation似乎在HTTP调用完成后立即完成并返回。在这些操作完成后调用成功和失败块。因此,如果您有NSOperation A依赖于B,这是一个AFHTTPRequestOperation,那么您可能会看到B run,然后是A,接着是B的成功块。如果你创建一个"完成"操作并使A依赖它。然后让B排队"完成" B调用其成功或失败块时的运行操作。 "完成"操作有效信号A B完成了你想做的所有事情。