调试器停止在ASIHTTPRequest的scheduleReadStream上,没有错误

时间:2012-01-18 07:43:18

标签: iphone ios asihttprequest grand-central-dispatch nsoperationqueue

调试器在ASIHTTPRequest的scheduleReadStream方法中暂停,但不会产生错误。

更具体地说,它停在这条线上:

[[self readStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:[self runLoopMode]];

无论我多少次点击,它都不会离开此行或报告控制台中的任何错误。我注意到,当我点击播放时,主线程会通过一些操作前进。

我设置的方式,我有一个下载程序正在后台线程上工作(因此它可以在从完成的请求中接收它时进行解析和图像处理)。此下载程序对象使用ASINetworkQueue来安排请求。我想知道这是否会造成僵局。

这是代码片段,它在从刚刚完成的请求(不是队列的一部分)中解析一些数据后将请求添加到队列。

- (void)requestFinished:(ASIHTTPRequest *)request
{
    dispatch_async(serialQueue, ^{
        NSData *responseData = [request responseData];
        NSXMLParser *parser = [[NSXMLParser alloc] initWithData:responseData];
        [parser setDelegate:self];
        if ([parser parse]) {
            //Add pending operations
            for (NSNumber * key in self.currentRequests.keyEnumerator) {
                //Unrelated code getting the request from a dictionary
                [self.networkQueue addOperation:request];
            }
            [self.networkQueue go];
        }
    });
}

请注意,我还在整个代码中异步执行不相关的请求,这可能会在此队列被填充/告知的同时进行。

1 个答案:

答案 0 :(得分:1)

想出来。原来有EXC_BAD_ACCESS,但在iPhone上运行时却没有出现。在模拟器上运行时,它实际上显示正常。这种糟糕的访问是由于我没有使用initWithURL方法,而是设置URL(因为在创建对象时我还没有提供URL)。一旦URL准备好,一切都很好,我现在就打电话给initWithURL