我想让UIProgressView,NSURLConnection,NSOperation和NSOperationQueue一起工作。下面是代码:http://pastie.org/4080576
问题: connection:DidReceiveData:从来没有调用过:执行立即到-start(),通过-main(),然后到-connection:DidReceiveResponse:,返回到-main() (有时),最后返回到-connectionDidFinishDownloading:destinationURL:。
当我试图从这个链接下载图片时:http://upload.wikimedia.org/wikipedia/commons/4/41/Kharkov_picture_1787.jpg
我得到了这个输出:
2012-06-13 19:43:06.189下载文件is 5070:F 803收到回复: 2012-06-13 19:43:06.190下载文件is 5070:F 803文件大小为: 3075638建议文件名为: Kharkov_picture_1787.jpg 2012-06-1319:43:12.476下载文件接收0字节
而且,我也不知道connection:didReceiveResponse:属于哪里: NSURLConnectionDelegate还是NSURLConnectionDataDelegate。
如果有什么风格上的问题,我很高兴听到。谢谢。
发布于 2012-06-13 19:16:25
我强烈怀疑您的“繁忙”而循环正在消耗底层运行循环的执行,并扼杀了NSURLConnection在数据到达时处理数据的能力。
看看您的pastie.org代码,下面是您的主要罪魁祸首:
while (![self isFinished]) {
...
while ([self fileSize] == 0) {}
while ([self receivedDataLength] == 0) {}
...
}像这样繁忙的循环几乎不应该在iOS中使用。iOS编程在很大程度上是事件驱动的,特别是NSURLConnection.相反,更新您的UIProgressView以响应connection:DidReceiveData:等。
老实说,编写自己的NSURLConnection处理程序有点麻烦。我强烈建议您考虑使用开源库来解决其中的一些困难。这里有两个像样的要检查的:
https://stackoverflow.com/questions/11018818
复制相似问题