调试器在 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];
}
});
}
请注意,我还在整个代码中异步执行不相关的请求,这可能会在填充/通知此队列的同时进行。
最佳答案
想通了。原来有一个 EXC_BAD_ACCESS
但它在 iPhone 上运行时没有出现。在模拟器上运行时,它实际上正确显示。这种错误的访问是由于我没有使用 initWithURL
方法,而是设置了 URL(因为在创建对象时我还没有可用的 URL)。一旦 URL 准备就绪并且一切正常,我现在调用 initWithURL
。
关于iphone - 调试器停止在 ASIHTTPRequest 的 scheduleReadStream 上没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8906758/