我正在使用NSURLConnection从Web服务下载压缩文件。在didReceiveData中,我将数据附加到文件并使用良好的互联网连接似乎都正常工作。该文件在下载时透明地解压缩。 但是,如果我的互联网连接不良,则在收到所有数据之前,似乎会调用connectionDidFinishLoading。是否有另一个委托方法,我应该陷阱或NSURLConnection中的某种超时,使它认为下载完成而不是调用didFailWithError?
答案 0 :(得分:4)
您应该检查接收数据的大小是否符合预期。
以下内容将为您提供预期的数据大小:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
long long dataSize = [response expectedContentLength];
}
每次调用didReceiveData时,将其从dataSize中删除,如果调用connectionDidFinishLoading并且dataSize大于0,则会出现问题。
答案 1 :(得分: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];}
希望它可以提供帮助