2013-02-11 3 views
1

우리는 AFNetworking (https://github.com/AFNetworking/AFNetworking)과 NSOperationStack (https://github.com/nicklockwood/NSOperationStack)을 사용하여 종속성을 설정하여 마지막 작업이 나머지 작업보다 우선 순위를 갖도록합니다 스택 동작). AFURLConnectionOperation의 'start'메서드가 호출되면 문제가 발생하지만 종속성 때문에 작업의 isReady 메서드가 NO를 반환합니다. 이렇게하면 '시작'이 즉시 종료됩니다. 작업을 시작하기위한 첫 번째 시도 후에 'start'메서드가 다시 호출되지 않으므로 작업은 isFinished 상태에 결코 도달하지 않으며 대기열에서 삭제되지 않으며 결국에는 대기열에서 잼과 같은 작업이 수행됩니다. 나는이 문제에 대해 어떤 생각이라도 고맙게 생각한다. 고맙습니다!AFURLConnectionOperation AFURLConnectionOperation은 준비되기 전에 호출되고 나중에 다시 호출되지 않습니다.

추가 정보 : 작업이 취소되지 않고 대기열에 종속 서클이 표시되지 않습니다. AFNetworking 코드를 변경하지 않고 기존 operationQueue에서 setLIFODependendenciesForOperation을 사용합니다. [self.operationQueue setLIFODependendenciesForOperation : operation];

업데이트 : 이제는 그것에 대해 더 생각해보십시오. 한 지점에서 0 개의 종속성을 가질 수 있으며 NSReader가 NSOperationQueue가 작업 준비가되었다고 결정할 때 isReady가 YES를 반환하지만 start()가 호출 될 때까지 종속성이 1 이상으로 변경됩니다.

답변

5

사용중인 'NS'OperationStack Github 프로젝트의 문제와 같습니다. 그들은 NSOperationQueue에 추가 한 후 NSOperation 의존성을 변경

특별히 설명서에 좋습니다 :

중요 당신은 항상 당신의 작업을 실행 작업 큐에 추가하기 전에 종속성을 구성해야합니다. 나중에 추가 된 종속성은 주어진 조작 오브젝트가 실행되는 것을 막지 못할 수 있습니다. 는 (에서 : Concurrency Programming Guide: Configuring Interoperation Dependencies)

나는 더 나은 방법이 작업 큐 외부 자신의 LIFO 스택을 유지하고 다음으로 가장 중요한 작업의 대기열을 실행하는 데 하나의 작업의 마무리를 사용하는 것입니다 생각합니다.

또는 엄격하지 않아도 될 경우 -[NSOperation setPriority:]을 사용하여 이전 작업에 우선하여 나중에 작업의 우선 순위를 지정할 수 있습니다.

+0

고마워요, 로리. 나는이 질문에 대해 거의 대답한다고 생각한다. 당신의 대답에 진심으로 감사드립니다. –

관련 문제