Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 连接:didReceiveResponse:来自NSURLConnectionLegate从未被激发_Objective C_Multithreading_Nsoperation_Nsoperationqueue_Uiprogressview - Fatal编程技术网

Objective c 连接:didReceiveResponse:来自NSURLConnectionLegate从未被激发

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: 当我尝试从此链接下载图片时: 我得到这个输

我正在尝试让UIProgressView、NSURLConnection、NSOperation和NSOperationQueue一起工作。 代码如下:

问题:
连接: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是如何做到这一点的,但这也不是我的方式。再次感谢你们。顺便说一句,我只是不想把一项任务扩展到整个项目。在我看来,一个任务应该放在一个地方,但我看不出有这样的退出。如果你看到了,请告诉我。