NSURLConnection перестает получать данные

Недавно я закончил приложение, которое подключается к ряду веб-сервисов, предоставляемых моим клиентом. Я делал это бесчисленное количество раз в прошлом без каких-либо проблем.

Однако почему-то с одного из сервисов, который качает около 250кб-1мб данных.

+ (void)connection:(MCURLConnection *)connection didReceiveData:(NSData *)data

Иногда просто останавливается после первого звонка.

Вот лог когда работает

2014-08-19 11:57:43.270 MiniCheckout[886:60b] didReceiveResponse: didGetProductsForShop:
2014-08-19 11:57:43.270 MiniCheckout[886:60b] Code: 200
2014-08-19 11:57:43.271 MiniCheckout[886:60b] didReceiveData
2014-08-19 11:57:43.457 MiniCheckout[886:60b] didReceiveData
2014-08-19 11:57:43.645 MiniCheckout[886:60b] didReceiveData
2014-08-19 11:57:43.830 MiniCheckout[886:60b] didReceiveData
2014-08-19 11:57:44.003 MiniCheckout[886:60b] didReceiveData
2014-08-19 11:57:44.007 MiniCheckout[886:60b] didReceiveData
2014-08-19 11:57:44.169 MiniCheckout[886:60b] ConnectionFinished:didGetProductsForShop:

А когда нет (что бывает слишком часто!)

2014-08-19 11:57:43.270 MiniCheckout[886:60b] didReceiveResponse: didGetProductsForShop:
2014-08-19 11:57:43.270 MiniCheckout[886:60b] Code: 200
2014-08-19 11:57:43.271 MiniCheckout[886:60b] didReceiveData

Вот и все, он просто останавливается!

У меня есть таймер, который ждет 60 секунд, чтобы приложение не «зависло». Но это происходит слишком часто, и это не устраивает клиента.

Веб-сервер/услуги предоставляются клиентом, и проблема возникает через Wi-Fi и 3G.

Я обрабатывал веб-сервисы бесчисленное количество раз без проблем. Но я в тупике, почему это происходит.


person Dann    schedule 19.08.2014    source источник
comment
У меня такая же проблема. Также на iOS 7.1, а точнее 7.1.1! Любые мысли будут очень признательны!   -  person Niklas    schedule 06.10.2014
comment
Было бы интересно узнать, какие данные вы получаете в этих случаях.   -  person trojanfoe    schedule 24.04.2015


Ответы (1)


Вы можете указать время ожидания в вашем объекте NSURLRequest. Один из способов сделать это — создать его с помощью метода requestWithURL:cachePolicy:timeoutInterval:. (Вы можете передать параметр cachePolicy NSURLRequestUseProtocolCachePolicy по умолчанию, если не хотите беспокоиться об этой части.) Тайм-аут представляет собой значение с плавающей запятой в секундах, как и все временные интервалы в iPhone SDK.

Также убедитесь, что ваш делегат NSURLConnection установлен и отвечает на метод connection:didFailWithError:. Соединение всегда вызывает либо этот метод, либо connectionDidFinishLoading: после завершения соединения.

person aBilal17    schedule 24.04.2015