2013-06-13 3 views
5

Я использую библиотеку SDWebImage для асинхронного скачивания и кеширования изображений и веб-службы. Ниже приводится метод я использую для загрузки изображения:SDWebImage UITableView Сотовые изображения не сохраняются

- (void) downloadThumbnails:(NSURL *)finalUrl 
{ 
    SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
    [manager downloadWithURL:finalUrl 
        options:0 
        progress:nil 
        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) 
    { 
     if (image) 
     { 
      [self setThumbnail:image]; 
     } 
    }]; 

} 

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

UPDATE: ПРОСЬБА НЕ рекомендуем использовать следующее:

[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] 
        placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

Поскольку структура моей программы отличается. Во-вторых, если вы прочитаете описание библиотеки SDWebImage HERE, вы узнаете, что ее можно использовать так, как я ее использую, используя SDWebImageManager.

+0

Дайте код метода cellForRow – Durgaprasad

+0

@ Durgaprasad нет кода, связанного с SDWebImage, в cellForRowAtIndexPath. Просто сделайте это cell.thumbContainer.image = [миниатюра элемента]; – AJ112

+0

укажите этот код метода – Durgaprasad

ответ

2

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

Итак, если вы просто загрузили image и присвоили его некоторому свойству объекта (например, вы назначаете его thumbnail), если вы позже получите доступ к этому свойству, если будете просто перемещаться по механизму кеша.

Что вы могли бы сделать, чтобы сохранить структуру вашей программы:

  1. Хранить thumbnailURL в вашем self объекте;

  2. при загрузке изображения в первый раз, звоните SDWebImageManagerdownloadWithURL: метод, как вы это делаете; это также сохранит изображение в кеше; (это вы уже делаете в соответствии с указанным выше кодом)

  3. thumbnail свойство только для чтения, которое обращается к кешу, получая изображение, связанное с thumbnailURL.

Это наименьшее количество изменений, которые вы должны сделать.

Это может быть реализация имущества только для чтения, описанной в пункте 3:

- (UIImage*)thumbnail { 

    return [[SDImageCache sharedCache] imageFromDiskCacheForKey:self.thumbnailURL]; 
} 

где self.thumbnailURL другое свойство в вашем объекте, где сохранен URL изображения.

Надеюсь, это поможет.

+0

Прежде всего спасибо за ответ. Точка 1 и 2 в вашем ответе нуждается в небольшом объяснении, если вы можете предоставить код, который был бы велик, потому что из теории я предполагаю, что моя программа уже реализует эти два момента, или может быть, я ошибаюсь. T – AJ112

+0

Пожалуйста, см. Мое редактирование. Если вы уже делаете 1 и 2, то единственное, что вам нужно, это сделать пункт 3 - теперь это должно быть яснее, я надеюсь. – sergio

+0

Спасибо большое! Готово! – AJ112

1

Я думаю, что вы на неправильном пути.

Если вы хотите использовать SDWebImage для UITableView Than Do Follow.

1.Import UIImageView + WebCache.h по следующей инструкции, где и есть UITableView

#import <SDWebImage/UIImageView+WebCache.h>

2.Write следующие строки в методе cellForRowAtIndexPath Of UITableView

[cell.Logo setImageWithURL: finalUrl placeholderImage:[UIImage imageNamed:@"imagename.png"] options:SDWebImageRefreshCached];

  • Замените LOGO на имя вашего изображения в UITableViewCell
  • imagename.png - это изображение изображения в проекте, которое будет отображаться до тех пор, пока изображение не загрузится из Интернета.

Комментарий здесь, если у вас возникли проблемы.

Все лучшее

+0

Просьба проверить UPDATE в моем вопросе. Благодаря! – AJ112

+0

ОК. Как вы находите, что изображение не является Cacheing? – CRDave

+0

Если я снова закрою и запустил приложение. Изображения не будут отображаться, что означает, что они не сохраняются на диске. – AJ112

0

я предпочитаю следующий метод для асинхронного скачивания изображения в Tableview.
На самом деле, вам не нужно обрабатывать SDWebImageManager.

[cell.imageView setImageWithURL:[NSURL URLWithString:@"IMAGE_URL"]]; 
[cell.imageView setImageWithURL:[NSURL URLWithString:@"IMAGE_URL"] placeholderImage:[UIImage imageNamed:@"LOCAL_IMAGE_NAME"]]; 

Убедитесь, что вы импортировали UIImageView+WebCache.h в вашей реализации. Такая же загрузка асинхронного изображения также доступна для категории UIButton+WebCache.h и категории MKAnnotationView+WebCache.m.

Новая версия SDWebImage также поддерживает GIF анимацию, используя UIImage+GIF.h категории
https://github.com/rs/SDWebImage

+0

Просьба проверить UPDATE в моем вопросе. Конечно, я импортировал заголовок, и остальная часть вашего ответа о gif-анимации не связана с моим вопросом. Спасибо – AJ112

Смежные вопросы