3

我需要执行一系列按顺序运行的服务器调用,并且只有在所有先前的请求都成功的情况下才能执行一个请求。

AFHTTPRequestOperation所以,我的想法是为每个请求创建一个并[myAFHTTPClient enqueueBatchOfHTTPRequestOperations:]用来触发它们。

我可以通过调用使它们按顺序运行
[myAFHTTPClient.operationQueue setMaxConcurrentOperationCount:1]

但是我怎样才能确保只有在先前的操作成功时才​​能运行剩余的操作?

我尝试completionBlock为每个调用[myAFHTTPClient cancelAllOperations]的操作创建一个,以防操作失败,但是队列中的完成块和下一个操作同时运行,因此下一个请求在被取消之前可能已经发送到服务器。我应该怎么办?

4

1 回答 1

7

由于AFHTTPRequestOperations只是标准NSOperations,编写了一个示例项目并想出了如何解决这个问题:

如果NSOperationQueue's设置maxConcurrentOperationCount为 1,则队列中的an和下一个会同时运行。NSOperationcompletionBlockNSOperation

但是,如果 everyNSOperation通过调用 链接到其前一个操作addDependency:,则操作的执行将等待前一个操作completionBlock完成。

因此,NSOperations通过将所有操作链接在一起addDependency:,如果操作失败,请取消当前操作的完成块中的剩余操作。

(另请参阅NSOperations 和它们的 completionBlocks 是否同时运行?

于 2014-03-04T12:37:50.237 回答