1

내 응용 프로그램은 사용자 동작에 따라 일련의 업로드 작업을 수행해야합니다. 그는 한 줄로 긴 업로드 목록을 프로그램 할 수 있으므로 네트워크 혼잡을 피하기 위해 한 번에 하나의 NSURLConnection 만 실행하는 것을 선호합니다. NSOperationQueue를 사용하여 업로드 작업을 추가하고 있습니다. 큐 안에 내가 사용NSURLConnection과 NSOperationQueue 내부의 GCC 연결

[NSURLConnection sendAsynchronousRequest:uploadRequest 
            queue:tempQueue 
         completionHandler:/* completion code */]; 

내 문제도 모든 비동기 연결 기능 블록의 사용 때문에 즉시 반환, 그래서 NSOperationQueue이를있는 NSURLConnection이 끝날 때까지 기다려하지 않습니다 작동한다는 것입니다 직접 다음 업로드로 계속 진행됩니다.

나는 NSMutableArray를 구현하여 현재 및 대기중인 업로드 목록을 추적하고 이에 따라 디스패치 할 수 있음을 알고 있지만 이미 있으면이 루프를 기다리는 간단한 방법이 있는지 알고 싶습니다. 열린 NSURLConnection이 진행 중입니다. 동기 연결을 사용하지 왜이

답변

1

작동합니다 희망 :

+0

UI를 차단하지 않고 백그라운드 대기열에서 동기식 연결을 수행 할 수 있습니까? sendSynchronousRequest를 블록과 함께 사용할 수 있습니까, 아니면 델리게이트 함수를 사용해야합니까? 미리 감사드립니다. – flip79

+0

동기 요청은 완료 될 때까지 차단하지만 작업 대기열에 넣으면 기본 스레드를 차단하지 않습니다. 또한 차단하기 때문에 대리자 콜백이 필요하지 않으며 한 번의 호출로 모든 것을받을 수 있습니다. 유일한 단점은 단일 요청의 진행 상태를 알 수 없다는 것입니다. – zoul

0

글쎄, 당신은 1 처럼 [1 큐 setMaxConcurrentOperationCount]에 작업 큐 maxConcurrentOperationCount을 설정할 수 있습니까?

[myQueue addOperationWithBlock:^{ 
    NSData *data = [NSURLConnection sendSynchronousRequest:… 
     returningResponse:… error:…]; 
    // … 
}]; 

최대 동시 작업 수를 1로 설정하면 업로드가 하나씩 진행됩니다.

+0

그랬지 만 블록 기능이 즉시 반환되므로 대기열이 빨리 지워지므로 작동하지 않습니다. – flip79