Обработка NSURLRequest с таймаутом при использовании делегата

StackOverflow https://stackoverflow.com/questions/1252669

Вопрос

Я использую NSMutableURLRequest для подключения к веб-сайту, чтобы получить ответ JSON.Я делаю это, генерируя запрос, а затем используя NSURLConnection с делегатом self для обработки асинхронного соединения.Я реализовал все обычные методы делегирования:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

Все это отлично работает при возврате данных, устранении любых возникающих ошибок и т.д.Однако с таймаутом NSURLRequest, установленным на 10 секунд, я, похоже, не вызываюсь в этих методах (я ожидал, что будет вызван didFailWithError).Он просто сидит там вечно, и у меня нет уведомления о том, что время ожидания истекло.

Читая документы iPhone API, я не вижу никаких упоминаний о том, что следует произойдет, когда наступит тайм-аут, просто вы можете установить значение тайм-аута.Что должно произойти?Я не видел никаких других методов делегирования в API, которые могли бы помочь.Мне не нужно вручную проверять наличие тайм-аутов, не так ли?Являются ли тайм-ауты только для синхронных запросов?

Это было полезно?

Решение

Ваш тайм-аут получен в этом методе:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

Другие советы

вы будете получать такой тип iofo:

в действительно потерпел неудачу с

ошибка:Ошибка Домена =NSURLErrorDomain Code=-1001 userInfo=0xed4870 "истекло время ожидания"

Поведение тайм-аута немного причудливое, см. этот поток на форумах разработчиков Apple.

То, что я сделал, было вот что:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    if (error.code == -1001){
        [self showTimeoutAlert];//My method to show dialog with timeout message.
    } else {
        [self showInvalidURLAlert];//My method to show dialog with bad URL message.
    }
}

Как было сказано ранее, -1001 - это тайм-аут, в других тестах я получил -1003 (из-за неправильного URL или отсутствия доступного соединения).

Я стремился обработать тайм-аут так, чтобы все остальное я рассматривал как плохой URL.

Поместите несколько инструкций log в каждый метод и проверьте, что они дают.Всякий раз, когда истекает время ожидания, вы обязательно получаете уведомление на консоли о тайм-ауте.Я получаю это уведомление .Проверьте свой код, и если у вас все еще есть проблемы, сообщите нам об этом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top