Вы можете установить время ожидания NSURLConnection и делегата для ответа на селектор connection:didFailWithError:
. Смотрите это С.О. тема.
если ваш делегат никогда не вызывается, это как-то известная проблема .
Единственный обходной путь, по-видимому, это установка собственного NSTimer через некоторое время и отмена запроса. Это определенно неловко, но это не должно быть так сложно.
Если вам интересно узнать причину проблемы с тайм-аутом, похоже, это связано с медленным запуском подсистемы 3G в iPhone.