2015-04-16 38 views
2

我正在使用AFNetworking作为我的网络堆栈来与Web服务进行通信并填充本地数据存储。在同步运行期间,我有一组API端点可以运行,并且当运行完成时,我添加一个最终操作,它将生成的JSON填充到数据库中。将“最终”NS操作添加到未确定操作次数的队列中

我遇到的问题是这些JSON抓取操作的结果需要我调用其他端点,现在我不知道何时应该添加“最终”操作。

我现在的工作方式是,我有一系列的主要操作,然后添加“最终”操作。在此期间,初选已经返回,造成我创造二次操作,就像这样:

* Primary Fetch Operation A 
* Primary Fetch Operation B 
* Final Operation 
* Secondary Fetch Operation B1 

我需要弄清楚如何保证“最后操作”总是要过去的运行。

我试过的一件事是添加一个观察者到操作队列的operationCount属性,但它似乎可以在添加辅助操作之前运行到0。

回答

4

不幸的是,我相信观察者将无法正常工作,AFNetworking从NSOperationcompletionBlock调用回调,这意味着该操作已完成,并从队列中,这可以解释为什么你已经达到0 operationCount删除提交之前二次操作。

你可以使用一个dispatch_group_t调度的操作(原发或继发)输入的组(dispatch_group_enter),然后当操作完成你离开组(dispatch_group_leave)之前做到这一点。如果完成的操作在离开组之前需要进行辅助操作,请遵循相同的模式,再次输入组并安排辅助操作。最后,当所有操作都完成后,您会收到通知(dispatch_group_notify),以便安排最终操作的完美时间。

+1

是的!可爱的答案,谢谢。我在这个问题中发现了更多关于几个实现的信息:http://stackoverflow.com/questions/11909629/waiting-until-two-async-blocks-are-executed-before-starting-another-block –