웹 서비스에서 압축 파일을 다운로드 할 때 NSURLConnection을 사용하고 있습니다. didReceiveData에서 파일에 데이터를 추가하고 좋은 인터넷 연결을 사용하면 모두 제대로 작동하는 것처럼 보입니다. 파일은 다운로드 될 때 투명하게 압축 해제됩니다. 그러나 인터넷 연결 상태가 좋지 않으면 모든 데이터를 받기 전에 connectionDidFinishLoading이 호출 된 것 같습니다. NSURLConnection에서 트랩이나 다른 종류의 시간 초과가 발생하여 다운로드가 didFailWithError를 호출하는 것과 반대로 완료되었다고 생각하는 다른 대리자 메서드가 있습니까?모든 파일을 다운로드하기 전에 NSURLConnection connectionDidFinishLoading이 호출되었습니다.
답변
수신 된 데이터의 크기가 예상과 같은지 확인해야합니다.
다음 당신에게 데이터의 예상 크기 얻을 것이다 :
이-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
long long dataSize = [response expectedContentLength];
}
당신이 didReceiveData로 전화를받을 때마다의 dataSize에서 그것을 감소를, 그리고 당신이 connectionDidFinishLoading에 전화를 얻을 경우 dataSize가 더 크다 0보다 큰 경우 문제가 발생합니다.
나는이 문제에 대해서도 알고 있었기 때문에 나는 그것을 가지고 있었고, 무엇이 잘못되었는지를 이해하기 위해 많은 시간을 보냈다.
분명히, 더 나은 결과를 (iOS에서) 나는 뭔가, [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:TRUE];
내가받은 데이터에 대한 이중 검사를 한 사용 및 모든 데이터를 수신하지 않은 경우는 중지 요청을 다시 시작하는 경우가 같은 :
- (void)connectionDidFinishLoading:(NSURLConnection *)myConnection{
if (receivedDataSize<expectedDataSize) // protection
{ [self.connection cancel]; [self setConnection:nil]; [self setResponseData:nil];
self.connection = [NSURLConnection connectionWithRequest:[myConnection originalRequest] delegate:self];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:myConnection.originalRequest.URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:kRestRequestTimeout]; [request setHTTPMethod:myConnection.originalRequest.HTTPMethod];
// Define the bytes we wish to download. Start from where it's stopped
NSString *range = [NSString stringWithFormat:@"bytes=%i-",[[NSNumber numberWithLongLong:receivedDataSize]intValue]];
[request setValue:range forHTTPHeaderField:@"Range"];
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:TRUE];}
희망이 도움이 될 것입니다
- 1. "큰 이미지 목록"을 다운로드하기 전에 페이지의 모든 css & js를로드하십시오.
- 2. 파일을 다운로드하기 전에 Alfresco에서 맞춤 작업을 실행하는 방법은 무엇입니까?
- 3. 파일을 다운로드하기 전에 파일 크기를 확인하는 방법은 무엇입니까?
- 4. 파일을 다운로드하기 전에 FTP 서버에 파일이 있는지 여부를 확인하십시오.
- 5. connectionDidFinishLoading이 바로 호출되지 않습니다.
- 6. 모든 요청시 컨트롤러 생성자가 호출되었습니다.
- 7. FB.init()을 호출하기 전에 FB.login()이 호출되었습니다.
- 8. HTTP를 통해 데이터를 다운로드하기 전에 파일 크기를 결정하십시오.
- 9. Python ftplib은 다운로드하기 전에 파일의 크기를 가져올 수 없습니까?
- 10. PHP에서 강제 다운로드하기 전에 헤더에서 파일 사용 권한을 설정 했습니까?
- 11. 설치를 시작하기 전에 모든 파일을 폴더로 추출하십시오.
- 12. NSURLConnection - didFailWithError가 호출되지 않았습니다.
- 13. 앱을 차단하지 않고 다운로드하기
- 14. NSURLConnection
- 15. 자바에서는 다운로드하기 전에 웹 페이지의 크기를 결정할 수 있습니까?
- 16. 브라우저로 다운로드하기 전에 이미지를 클라이언트 해상도로 자르기하는 방법
- 17. 파이썬 : HTTP 서버에서 파일 다운로드하기
- 18. 인터넷에서 안드로이드 레이아웃 다운로드하기
- 19. Trac에서 소스 코드 다운로드하기
- 20. 포인터가있는 NSURLConnection
- 21. Django : 일반보기에서 다운로드하기
- 22. NSURLConnection 성능
- 23. cellForRowAtIndexPath가 너무 늦게 호출되었습니다.
- 24. NSURLConnection help
- 25. 모든 페이지로드 전에 세션 확인?
- 26. Internet Explorer는 HTTP를 통해 파일을 다운로드하기 위해 BHO에 기능을 제공합니까?
- 27. 큰 파일을 다운로드하기 위해 file_get_contents를 사용하는 중 오류가 발생했습니다.
- 28. webview에서 .apk 파일을 다운로드하기 위해 기본 브라우저를 모방하는 방법은 무엇입니까?
- 29. NSURLConnection 누출?
- 30. NSOperation의 NSURLConnection
내 문제를 해결할 것입니다 고맙지 만 명확하게 뭔가 잘못되었을 때 NSURLConnection이 오류없이 완료했다고 생각하는 이유를 여전히 이해할 수 없습니다. – Russ
웹 서버는 이미 가지고있는 데이터로 충분하지 않을 수도 있고 다시 시도하지 않거나 중지 한 곳에서 다시 시작하기 때문에 시간 초과시 오류를보고 할 의무가 없습니다. –
그냥이 바보 같은 버그에 부딪혔습니다. 도대체 왜 FailWithError가 불렀지? 그것은 분명히 오류입니다 !! –