Я бы не стал полагать, что ошибка не равна нулю, чтобы указать, что произошла ошибка.
Я использовал проверку ошибок, как описано в ответе Бена, но я полагаю, что в некоторых обстоятельствах она выдает ложноположительные / ложные ошибки.
Согласно этому SO-ответу , я перехожу к использованию результата метода для определения успеха / неудачи. А затем (и только тогда) проверьте указатель ошибки на подробности ошибки.
NSError *requestError;
NSURLResponse *urlResponse = nil;
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
/* Return Value
The downloaded data for the URL request. Returns nil if a connection could not be created or if the download fails.
*/
if (response == nil) {
// Check for problems
if (requestError != nil) {
...
}
}
else {
// Data was received.. continue processing
}
Этот подход позволит избежать реакции на ошибку, возникшую в процессе загрузки, которая не вызвала сбой. Я думаю, что возможно, когда происходит загрузка, могут возникать некритические ошибки, которые обрабатываются в рамках, и они имеют побочный эффект установки указателя ошибки с объектом ошибки.
Например, я получаю сообщения об ошибках POSIX от пользователей, скачавших приложение, которые, похоже, произошли глубоко во время обработки URL-соединения.
Этот код используется для сообщения об ошибке:
NSString *errorIdentifier = [NSString stringWithFormat:@"(%@)[%d]",requestError.domain,requestError.code];
[FlurryAPI logError:errorIdentifier message:[requestError localizedDescription] exception:nil];
И появляется сообщение об ошибке:
Platform: iPhone
Error ID: (NSPOSIXErrorDomain)[22]
Msg: Operation could not be completed. Invalid argument
Отображение этого обратно ..
requestError.domain = NSPOSIXErrorDomain
requestError.code = 22
[requestError localizedDescription] = Operation could not be completed. Invalid argument
Все, что мне удалось выкопать, это то, что код ошибки 22 - EINVAL
, но это не дало никаких подробностей.
Другие ошибки, которые я получаю, относятся к домену NSURL, который я ожидаю при различных условиях сети:
NSURLErrorTimedOut
NSURLErrorCannotConnectToHost
NSURLErrorNetworkConnectionLost
NSURLErrorNotConnectedToInternet
+others