Ну, хотя это не имеет прямого отношения к вашему вопросу, вы можете рассмотреть возможность использования встроенных средств асинхронного запроса NSURLConnection вместо того, чтобы использовать собственные методы с dispatch_async (), используя либо + sendAsynchronousRequest: queue: завершение :handHandler:, либо - initWithRequest: делегат:.
В вашем случае из документации по методу:
"Возвращает nil, если не удалось создать соединение или произошла ошибка загрузки."
Итак, у вас есть такая идиома, как:
if (responseData) {
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
}
else {
// Read error and handle appropriately. To see the error on the console, for example:
NSLog(@"%@", [error localizedDesription]);
}
Главное, что следует помнить об этом (и всех других случаях, когда передается NSError **), заключается в том, что вы никогда сначала не прочитали значение ошибки, чтобы увидеть, произошел ли сбой. Вы проверяете его только после того, как вам сообщили (в данном случае, имея nil responseData), что возникла ошибка.
P.S.- В Objective-C «исключение» конкретно относится к ошибке программиста, поэтому использование «исключения» для описания сбоя сети некорректно. Это будет просто ошибка времени выполнения, которая, как ожидается, будет обработана в ходе обычной деятельности.