【问题标题】:Debugger stopping on ASIHTTPRequest's scheduleReadStream with no error调试器在 ASIHTTPRequest 的 scheduleReadStream 上停止且没有错误
【发布时间】:2012-01-18 07:43:18
【问题描述】:

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

更具体地说,它停在这一行:

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

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

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

这是从刚刚完成的请求(不是队列的一部分)中解析一些数据后将请求添加到队列的代码的 sn-p。

- (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];
        }
    });
}

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 2016-07-05
      • 2016-06-22
      • 2017-02-19
      相关资源
      最近更新 更多