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

Я использую 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 будет вызван). Он просто сидит там навсегда, и у меня нет уведомления о том, что он приурочен.

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

Ответ 1

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

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

Ответ 2

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

В этом случае с

error: Error Domain = NSURLErrorDomain Code = -1001 UserInfo = 0xed4870 "тайм-аут"

Ответ 3

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

Ответ 4

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

Ответ 5

Я сделал это:

- (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.