2009-07-24 2 views
2

도움을 주시면 대단히 감사하겠습니다. 여기에 붙어있어 :A/동기식 NSURLConnection : 다운로드 데이터없이 응답을 얻으시겠습니까?

내 UIWebView에서 URL을로드하기 전에 응답을 조사해야합니다. 그러나 동기식 NSURLConnection은 먼저 데이터를 다운로드 한 다음 응답에 액세스하도록 허용합니다.

비동기 NSURLConnection을 사용하면 데이터를 받기 전에 응답을 조사 할 수 있지만 대리 응답 메서드 연결에서만 응답을 검사 할 수 있습니다. didReceiveResponse :. 하지만 응답이 도착할 때까지 webView의 delegete 메소드 (webView : shouldStartLoadWithRequest : navigationType :)를 기다려야합니다. 두 대표는 모두 메인 스레드에 있기 때문에 (그렇게해야합니까?) 단순히 NSCondition을 사용하여 webView의 위임을 중지 할 수 없습니다. 즉, 주 스레드를 중지한다는 의미입니다.

누구든지이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

미리 감사드립니다.

답변

1

NSConnection을 사용하여 모든 데이터를 읽은 다음 -loadData:MIMEType:textEncodingName:baseURL:을 사용하여 UIWebView에로드하십시오.

+0

이 좋겠지 만 mime 형식을 찾으려면 xx MB 파일을로드 할 수 없습니다. 그래서 나는 그 대응을해야한다. – Yllier

+0

xx MB 파일을 어떤 방식 으로든로드 할 것입니다 (NSURLConnection 또는 UIWebView를 사용하여 모든 것이 가능합니다). UIWebView에 전달하기 전에 MIME 형식에 대한 지식으로 무엇을 할 것입니까? 아마도 당신이 빠뜨린 질문 중 해결책에 관한 문제보다는 문제가 더 많은 부분이있을 것입니다. –

+0

도움을 주셔서 감사합니다. 내 webView : shouldStartLoadWithRequest : navigationType : 위 URL에서 다운로드하거나 webView에 표시하려는 경우 위임을 결정하고 싶습니다 (MIME 유형이 html/php 또는 다른 유형의 파일인지 확인하십시오). 중요한 부분은 webView : shouldStartLoadWithRequest : navigationType :이 완료되기 전에 요청을 분석해야한다는 것입니다. 그래서 응답을 검사 할 수있을 때까지 webView 대리인을 대기 상태로 두는 방법을 찾아야합니다 (모든 데이터를 다운로드하지 않고 파일을 다운로드 할 것인지 사용자에게 묻고 싶습니다) (실제 브라우저와 같이) – Yllier

0

처음에는 웹 데이터에 동기식 메서드를 사용해서는 안되며 잠재적 인 지연이 좋지 않습니다.

두 가지 호출을하는 것이 좋습니다. 먼저 MIME 형식을 찾고 해당 MIME 형식을 확인할 수있게되는 즉시 연결을 취소합니다. 두 번째는 전체 데이터를 다운로드하려는 경우입니다. 이것은 UIWebView에로드 될 수 있으므로 무리한 것은 아닙니다.

4

헤더 만 있으면 GET 대신 HEAD 요청을 먼저 할 수 있습니다. 그것은 아무 시체도없이 머리글 만 반환합니다. 심지어 충분히 빨라서 동기식으로 수행하는 것을 고려해 볼 수 있습니다. 물론 철저히 테스트하고 싶을 수도 있습니다.

업데이트
사실, 동기화하지 마십시오. 응답 크기가 작더라도 요청의 대기 시간만으로 처리하려는 것보다 더 많은 시간이 소요될 수 있습니다.