Как я могу проверить, загружено ли у меня изображение, используя dataWithContentsOfURL в iPhone? - PullRequest
2 голосов
/ 29 сентября 2010

В своем приложении для iPhone я загружаю изображения, используя эту строку кода:

UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];

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

Спасибо

1 Ответ

3 голосов
/ 29 сентября 2010

Прежде всего, имейте в виду, что dataWithContentsOfURL: является блокирующим API и, если он используется в основном потоке, приведет к зависанию вашего приложения до его завершения. Если вы используете этот код на медленном соединении, таком как 3G или EDGE, ваше приложение будет не отвечать до тех пор, пока изображение не загрузится - вы этого не хотите.

Вместо этого следует рассмотреть один из следующих вариантов:

  • Использование NSURLConnection и его делегированных методов для загрузки данных изображения, создания объекта изображения и обновления пользовательского интерфейса после его завершения
  • Используйте блоки, чтобы обернуть ваш звонок в dataWithContentsOfURL: и отправить его в асинхронную очередь
  • Выполните эту работу в отдельном потоке (не рекомендуется, так как предыдущие два варианта дают тот же эффект с меньшим количеством кода).

Все это для другого вопроса. Что касается вашего фактического вопроса, вы можете проверить, является ли возвращенный объект данных действительным. Документы утверждают, что этот метод возвращает ноль, если объект данных не может быть создан.

Если вы хотите узнать причину, по которой произошел сбой, вы должны использовать dataWithContentsOfURL:options:error: и передать указатель ошибки, который можно проверить в случае сбоя.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...