Objective c 连接:didReceiveResponse:来自NSURLConnectionLegate从未被激发
我正在尝试让UIProgressView、NSURLConnection、NSOperation和NSOperationQueue一起工作。 代码如下: 问题:Objective c 连接:didReceiveResponse:来自NSURLConnectionLegate从未被激发,objective-c,multithreading,nsoperation,nsoperationqueue,uiprogressview,Objective C,Multithreading,Nsoperation,Nsoperationqueue,Uiprogressview,我正在尝试让UIProgressView、NSURLConnection、NSOperation和NSOperationQueue一起工作。 代码如下: 问题: 连接:DidReceiveData:从未调用:执行立即转到-start(),通过-main(),然后转到-connection:DidReceiveResponse:,返回-main()(有时),最后转到-connectiondFinishDownloading:destinationURL: 当我尝试从此链接下载图片时: 我得到这个输
连接:DidReceiveData:
从未调用:执行立即转到-start()
,通过-main()
,然后转到-connection:DidReceiveResponse:
,返回-main()
(有时),最后转到-connectiondFinishDownloading:destinationURL:
当我尝试从此链接下载图片时:
我得到这个输出: 2012-06-13 19:43:06.189下载文件登录队列[5070:f803]已收到 回复:2012-06-13 19:43:06.190 下载filesinopqueue[5070:f803]文件大小为:3075638 文件名为:Kharkov_picture_1787.jpg 2012-06-13 19:43:12.476 下载filesinopqueue[5070:f803]已完成下载。收到0 字节 此外,我无法确定连接:didReceiveResponse:属于哪里: NSURLConnectionLegate或NSURLConnectionDataDelegate 另外,如果有一些风格问题,我很乐意听到。Thx.我强烈怀疑您的“忙”,因为循环正在消耗底层运行循环的执行,并使NSURLConnection无法在数据到达时处理数据 看看你的pastie.org代码,以下是你的罪魁祸首:
while (![self isFinished]) {
...
while ([self fileSize] == 0) {}
while ([self receivedDataLength] == 0) {}
...
}
像这样的忙循环几乎不应该在iOS中使用。iOS编程主要是事件驱动的,尤其是NSURLConnection。相反,更新您的UIProgressView
,以响应连接:DidReceiveData:
等
老实说,编写自己的NSURLConnection处理程序有点麻烦。我强烈建议您考虑使用一个开源库来处理一些困难。这里有两个不错的选择:
比你好多了,我的想法是一样的。我将重构这些循环,但我不能使用这样的外部库。另外,我知道webkit是如何做到这一点的,但这也不是我的方式。再次感谢你们。顺便说一句,我只是不想把一项任务扩展到整个项目。在我看来,一个任务应该放在一个地方,但我看不出有这样的退出。如果你看到了,请告诉我。