Отладчик останавливается по расписанию ASIHTTPRequest scheduleReadStream без ошибок - PullRequest
1 голос
/ 18 января 2012

Отладчик делает паузу в методе scheduleReadStream ASIHTTPRequest, но не выдает ошибок.

Более конкретно, он останавливается на этой строке:

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

Независимо от того, сколько раз я нажимаю на игру, она не выходит за пределы этой строки и не сообщает о каких-либо ошибках в консоли. Однако я заметил, что основной поток продвигается через некоторые из своих операций, когда я нажимаю кнопку play.

Как я настраиваю вещи, у меня есть загрузчик, который работает в фоновом потоке (поэтому он может выполнять синтаксический анализ и манипулирование изображениями, когда он получает его от выполненных запросов). Этот объект загрузчика использует 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 Ответ

1 голос
/ 19 января 2012

Разобрался. Оказывается, был EXC_BAD_ACCESS, но он не показывался при работе на iPhone. При запуске на симуляторе он действительно обнаружился правильно. Этот плохой доступ был вызван тем, что я не использовал метод initWithURL, вместо этого установил URL (поскольку при создании объекта у меня еще не было доступного URL). Я звоню initWithURL сейчас, когда URL готов и все хорошо.

...