我正在使用NSURLConnection從Web服務下載壓縮文件。在didReceiveData中,我將數據追加到文件中,並且使用良好的互聯網連接似乎都能正常工作。該文件在下載時透明地解壓縮。 但是,如果我的網絡連接較差,則在收到所有數據之前,會調用connectionDidFinishLoading。是否有另一個委託方法,我應該陷阱或NSURLConnection中的某種超時,使它認爲下載完成,而不是調用didFailWithError?在下載所有文件之前調用NSURLConnection connectionDidFinishLoading
回答
您應該檢查收到的數據的大小是否與預期的一樣。
下面將讓你的數據的預期大小:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
long long dataSize = [response expectedContentLength];
}
每次你得到didReceiveData呼叫時,它會從數據尺寸減少,如果你得到一個電話connectionDidFinishLoading和數據尺寸較大比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. NSURLConnection在它應該調用connectionDidFinishLoading之前?
- 2. NSURLConnection connectionDidFinishLoading不隨機調用
- 3. NSURLConnection didFailWithError connectionDidFinishLoading同時調用?
- 4. 有什麼辦法強制異步NSURLConnection在後臺調用connectionDidFinishLoading?
- 5. NSURLConnection下載大zip文件
- 6. NSURLConnection(下載大於500M的大文件)
- 7. NSURLConnection的接收「假」的文件下載
- 8. 無法在iphone模擬器中使用NSURLConnection下載文件
- 9. NSURLConnection不下載所有數據
- 10. 如何在asp.net中下載文件之前調用JavaScript函數?
- 11. NSURLConnection的不下載
- 12. NSURLConnection下載大文件(> 40MB)
- 13. 如何使用NSURLConnection下載文件?
- 14. 如何在故事板中使用NSURLConnection下載文件
- 15. 在下載文件之前檢查javascript
- 16. 應用程序不使用NSURLConnection下載文件
- 17. 在所有其他軟件包之前加載文件
- 18. 使用NSURLConnection緩慢下載
- 19. 在getter之前調用所有@PostConstruct
- 20. 使用NSURLConnection下載
- 21. NSURLConnection不在名稱下使用空格下載文件
- 22. 控制返回之前調用委託方法的NSURLConnection
- 23. connectionDidFinishLoading之前調用didReceiveData與rails生產發送照片
- 24. 奇怪的多個文件下載 - NSURLConnection
- 25. 下載文件之前準備
- 26. iphone - 爲什麼NSURLConnection connectionDidFinishLoading未運行?
- 27. 在調用下載函數之前調用ajax函數
- 28. 使用wget下載所有pdf文件
- 29. 下載所有可用(和新)文件
- 30. 下載的所有文件在網站
感謝,將解決我的問題,但我還是不明白爲什麼NSURLConnection的認爲當有明確的東西錯了,它已經無誤地完成。 – Russ 2010-08-27 18:13:45
Web服務器沒有義務在超時時報告錯誤,因爲在某些情況下,您已獲得的數據可能已足夠,並且如果不是您再次嘗試或從您停止的地方恢復,請立即致電 – 2010-08-27 23:23:44
剛剛被這個愚蠢的錯誤所擊中。爲什麼地獄不是didFailWithError調用?這顯然是一個錯誤! – 2013-10-11 13:48:19