동기식 NSURLConnection API를 사용하는 것이 좋은 아이디어라고 생각합니다. 다른 옵션이 있습니다. 하나는 비동기 NSURLConnection API를 사용하는 NSURLConnection 주변에 래퍼 객체를 작성하여 비동기 API 콜백에서 제공하는 멋진 정보 (다운로드 진행률 포함)를 요청할 때 요청이 발생하는 동안 UI를 쉽게 업데이트 할 수 있지만 필요한 모든 작업을 수행하기위한 자체 동기식 메소드를 제공합니다. 본질적으로, 뭔가 같은 :
@implementation MyURLConnectionWrapper
- (BOOL)sendRequestWithError:(NSError **)error
{
error = error ? error : &(NSError *){ nil };
self.finishedLoading = NO;
self.connectionError = nil;
self.urlConnection = [][NSURLConnection alloc] init...]
while (!self.finishedLoading)
{
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate: [NSDate distantFuture]];
}
if (self.connectionError != nil)
{
*error = self.connectionError;
return NO;
}
return YES;
}
@end
(이것은 모든 내 머리 위로를 입력하고, 많이 생략되어 있지만, 당신에게 기본 아이디어를 줄 것이다.) 또한 떨어져 불 같이 뭔가를 할 수
모두 직렬 파견 큐의 사용을 삼가고 이전에 완료 대리자 메서드에서 각 요청 :
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
{
[self sendNextRequest];
}
어느 쪽이든, 당신은 적절하게 연결 오류를 처리하는 방법에 대해 생각해야합니다. 나는 두 가지 접근법을 다른 장소에서 사용하여 성공을 거두었 다.
빠른 답변을 위해 (Andrew Madsen 및 Xjones)에게 감사드립니다. 동기식 통화가 나를 위해 작동 할 것 같은데. (나는 그것을 피하고 그것과 함께하는 추가 유지 보수 작업을 피하기를 바랬다.) 콜을 엔드 - 투 - 엔드 체인에 관해서는 가능했지만, 내 상황에서는 그것이 가치가 있는지 확신 할 수 없다. 디스패치 대기열을 관리하는 대신, 대신 대기열을 관리하는 일이 포함됩니다. 나는 동기 호출을 설정하는 것이 더 간단하다고 생각한다. –