0

我试图让 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 下载FilesInOpQueue[5070:f803] 收到响应:2012-06-13 19:43:06.190 下载FilesInOpQueue[5070:f803] 文件大小为:3075638 建议文件名为:Kharkov_picture_1787.jpg 2012-图片_1787.jpg 2012- 13 19:43:12.476 下载FilesInOpQueue[5070:f803] 下载完成。收到 0 个字节

另外,我不知道connection:didReceiveResponse:属于哪里:NSURLConnectionDelegate 或 NSURLConnectionDataDelegate。

PS如果有一些风格问题,我很高兴听到它们。谢谢。

4

1 回答 1

1

我强烈怀疑您的“忙碌” while 循环正在消耗底层运行循环的执行,并阻止 NSURLConnection 在数据到达时对其进行处理。

查看您的 paste.org 代码,这是您的主要罪魁祸首:

while (![self isFinished]) {
    ...
    while ([self fileSize] == 0) {}
    while ([self receivedDataLength] == 0) {}
    ...
}

像这样的繁忙循环几乎不应该在 iOS 中使用。iOS 编程很大程度上是事件驱动的,尤其是 NSURLConnection。相反,更新您UIProgressView的响应connection:DidReceiveData:等。

老实说,编写自己的 NSURLConnection 处理程序有点麻烦。我强烈建议您考虑使用可以处理一些困难的开源库。这里有两个不错的检查:

  1. https://github.com/AFNetworking/AFNetworking
  2. https://github.com/pokeb/asi-http-request
于 2012-06-13T19:16:25.597 回答