伙计们,我现在正在报亭上工作。我试图处理网络错误。
您在下面的图片中看到的是我的简单日志("百分比:%i"位于connection:didWriteData:totalBytesWritten:expectedTotalBytes:
内)。
我的问题在最后3行代码中描述。
我在这方面做了什么:
connection:didWriteData:totalBytesWritten:expectedTotalBytes:
totalBytesWritten
等于expectedTotalBytes
connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL
。之后:
万岁,我刚刚下载了我的.zip,我可以打开包装,在我的视图中宣布状态等等...... :(
我的问题是进行了什么?
我已实施connection:didFailWithError:
,但未调用。
我试图抓住上次调用totalBytesWritten
中的didWriteData:
并将其与DidFinishDownloading:
我已经剥离了我的所有项目,只是为了确保它与我的整个设计无关。
我正考虑将NSTimer
和NKIssueContentStatusAvailable
组合起来检查实际下载状态。
一切都很糟糕。不是吗?
更新
答案 0 :(得分:0)
切换到Airplane时不再是一个问题,但在限制Charles代理时仍然可以重现这个问题。
我最终得到了这个解决方案(检查connection:didWriteData:...
是否在connectionDidFinishDownloading:destinationURL:
中说出真相):
- (void)connection:(NSURLConnection *)connection didWriteData:(long long)bytesWritten totalBytesWritten:(long long)totalBytesWritten expectedTotalBytes:(long long)expectedTotalBytes
{
...
self.declaredSizeOfDownloadedFile = expectedTotalBytes;
}
和
- (void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *) destinationURL
{
NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:destinationURL.absoluteString error:nil];
NSNumber* destinationFileSize = [fileAttributes objectForKey:NSFileSize];
if (destinationFileSize.intValue != self.declaredSizeOfDownloadedFile)
{
NSError* error = ...;
[self connection:connection didFailWithError:error];
self.declaredSizeOfDownloadedFile = 0;
return;
}
...
}