Для загрузки изображений из сети есть два очевидных случая сбоя:
- Загруженный файл не был изображением вообще.
- Загруженные данные содержат только часть изображенияdata.
Для первого случая nil проверка возвращаемого значения различных методов UIImage, вероятно, является лучшим способом обработки этого случая ошибки.
Следующие методы класса на UIImage
будутвернуть ноль, если изображение не может быть инициализировано с данными, которые были ему предоставлены: + (UIImage *)imageWithData:(NSData *)data
и + (UIImage *)imageWithContentsOfFile:(NSString *)path
.
Код, который выполняет проверку на ноль, может выглядеть следующим образом:
UIImage *image = [UIImage imageWithContentsOfFile:pathToImage];
if (image) {
// The image was loaded. Display it
}
else {
// The image was not loaded. Redownload or display a placeholder, etc...
}
Для второго случая сбоя это скорее всего результат потери соединения.В этом случае сбой лучше всего обрабатывать в делегате NSURLConnection.При загрузке изображения, если вызывается - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
, данные для запроса должны быть отброшены.
Также имейте в виду, что didFailWithError:
не будет вызываться для ответов 4xx или 5xx от сервера.Он вызывается, когда соединение обрывается по другим причинам.Как правило, было бы неплохо убедиться, что вы записываете данные изображения на диск только тогда, когда сервер ответил 200 OK.