AFURLConnectionOperation'start'方法在准备好之前被调用,之后再也不会被调用

时间:2013-02-11 21:44:11

标签: objective-c afnetworking nsoperation

我们在app和NSOperationStack(https://github.com/AFNetworking/AFNetworking)中使用AFNetworking(https://github.com/nicklockwood/NSOperationStack)来设置依赖关系,以便最后一次操作优先于队列中的其余操作(堆栈行为)。当“开始”时,我遇到了一个问题。 AFURLConnectionOperation的方法被调用,但是操作是“准备”。由于依赖性,方法返回NO。这使得“开始”#39;马上退出。在第一次尝试开始操作之后,开始'方法永远不会被再次调用,因此操作永远不会到达isFinished状态,永远不会从队列中删除,最终操作会阻塞队列。我很感激在这件事上的任何想法。谢谢!

更多信息:没有任何操作被取消,我也没有在队列中看到任何依赖关系圈。 我们在现有的operationQueue上使用setLIFODependendenciesForOperation而不改变AFNetworking代码:[self.operationQueue setLIFODependendenciesForOperation:operation];

更新:现在,考虑更多信息,是否有可能在一个点上具有零依赖性并且当NSOperationQueue确定操作已就绪时isReady返回YES,但是,到时,start()被调用依赖项的数量更改为1或更多。

1 个答案:

答案 0 :(得分:5)

这听起来像是您正在使用的'NS'OperationStack Github项目的问题。

NSOperation中添加NSOperationQueue个联系后,在文档中明确建议将其更改为

  

重要在运行操作或将操作添加到操作队列之前,应始终配置依赖项。之后添加的依赖项可能无法阻止给定的操作对象运行。 (来自:Concurrency Programming Guide: Configuring Interoperation Dependencies

我认为更好的方法是在操作队列之外维护自己的LIFO堆栈,并使用一个操作的结束来触发下一个最重要的操作的排队。

或者,如果您不需要严格,也许您可​​以使用-[NSOperation setPriority:]来优先考虑之前的操作。