我正在努力让UIProgressView,NSURLConnection,NSOperation和NSOperationQueue一起工作。 以下是代码:http://pastie.org/4080576
问题:
connection:DidReceiveData:
从未调用:执行立即转到-start()
,通过-main()
,然后转到-connection:DidReceiveResponse:
,回到-main()
(有时),最后转到{{1 }}
当我尝试从此链接下载图片时: http://upload.wikimedia.org/wikipedia/commons/4/41/Kharkov_picture_1787.jpg 我得到了这个输出:
2012-06-13 19:43:06.189 downloadsFilesInOpQueue [5070:f803]收到 回复:2012-06-13 19:43:06.190 downloadsFilesInOpQueue [5070:f803] Filesize是:3075638建议 文件名是:Kharkov_picture_1787.jpg 2012-06-13 19:43:12.476 downloadsFilesInOpQueue [5070:f803]完成下载。收到0 字节
另外,我无法弄清-connectionDidFinishDownloading:destinationURL:
所属的位置:
NSURLConnectionDelegate或NSURLConnectionDataDelegate。
P.S。如果有一些风格问题,我很乐意听到它们。 THX。
答案 0 :(得分:1)
我强烈怀疑你的“忙”while循环正在消耗底层运行循环的执行,并阻止NSURLConnection在数据到达时处理数据。
查看你的pastie.org代码,这是你的主要罪魁祸首:
while (![self isFinished]) {
...
while ([self fileSize] == 0) {}
while ([self receivedDataLength] == 0) {}
...
}
这样的繁忙循环几乎不会在iOS中使用。 iOS编程主要是事件驱动的,尤其是NSURLConnection。相反,请更新您的UIProgressView
以回复connection:DidReceiveData:
等。
老实说,编写自己的NSURLConnection处理程序是一种混乱的痛苦。我强烈建议您考虑使用一个处理一些困难的开源库。这里有两个不错的结果: