2012-09-27 3 views
0

또 다른 NSURLConnection 질문을 귀찮게하여 죄송합니다. 이미 1,000 개가 넘는 것을 여기에 추가하십시오.NSURLConnection의 특정 상태를 기다리는 방법

시나리오는 다음과 같습니다. 동적으로로드 된 증강 현실 기능을 사용하는 iPhone 앱에서 사용자는 새로운 AR 모델을 다운로드 할 것인지 묻는 메시지가 표시됩니다. 모델은 수 MB 크기 일 수 있으므로 사용자는 다운로드하기 전에 모든 모델의 총 크기를 표시해야합니다.

각 파일의 크기를 알아 보려면 비동기식 NSURLConnection을 사용하고 응답을 받으면 다운로드를 중지해야합니다 ([NSURLResponse expectedContentLength]). 위임자의 연결에서이 작업을 수행 할 수 있습니다. didReceiveResponse : method.

제 질문은이 상태가 될 때까지 어떻게 기다릴 수 있습니까? NSURLConnection을 어떻게 설정하여 비동기 적으로 시작한 다음 연결 : didReceiveResponse : 메서드가 호출 될 때까지 기다릴 수 있습니까? 나는 NSCondition을 사용하여 NSURLConnection을 설정 한 후 대기하게하고 연결을 시도했다 : didReceiveResponse : 메소드가 조건을 전달했다. 그러나이 모든 것은 주 스레드를 고정시키는 것이 었습니다. 어떤 아이디어?

답변

1

아마도 GET 대신 HEAD 요청을 보낼 수 있습니다. 이것은 서버 설정에 따라 다를 수 있지만 Content-Length를 포함하여 헤더 만 제공해야합니다. 요청 메소드를 변경할 수 있도록 NSMutableURLRequest를 사용할 수 있어야하며 평소대로 응답에 expectedContentLength를 읽어야합니다.

+0

Thx Brian, HEAD 요청을 보내는 방법이 궁금합니다. 이 작업을 수행하면 동기 NSURLConnection을 사용할 수 있습니다 - 적절한 시간 초과 - 완료 될 때까지 기다린 다음 expectedContentLength를 읽습니다. 팁 고마워. –

+0

그냥 직장에 돌아온 후에 제안 사항이 잘 테스트됩니다. NSMutableURLRequest를 설정하고, 메소드를 HEAD로 변경하고, NSURLConnection sendSynchronousRequest를 수행하고, 응답에서 expectContentLength를 읽습니다. 모든 스레드, GCD 또는 콜백 없이도 가능합니다. 매우 우아합니다. 다시 한번 감사드립니다. –

관련 문제