Как отменить загрузку с помощью SDWebImageDownloader

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

Я использую код, представленный на странице github:

[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
                                                options:0
                                               progress:^(NSInteger receivedSize, NSInteger expectedSize)
                                               {
                                                   // progression tracking code
                                               }
                                               completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
                                               {
                                                   if (image && finished)
                                                   {
                                                       // do something with image
                                                   }
                                               }];

И в этом ошибке github пользователь говорит, что этот метод возвращает SDWebImageOperation, который может быть отменено, но я не смог найти способ отменить все операции с общим загрузчиком.


person estemendoza    schedule 07.04.2014    source источник
comment
Проверьте эти две функции: - (void)cancelPerformSelector:(SEL)aSelector target:(id)target arguments:(id)arg; - (void)cancelPerformSelectorsWithTarget:(id)target;   -  person AsifHabib    schedule 07.04.2014
comment
Не уверен, как его использовать, если вы можете привести пример, было бы лучше. Спасибо   -  person estemendoza    schedule 07.04.2014


Ответы (1)


Вместо этого вы можете использовать экземпляр SDWebImageManager, который включает методы для отмены запросов.

Однако, если вы показываете изображение в UIImageView в ячейке, вам следует просто использовать класс UIImageView (WebCache), который расширяет UIImageView и позволяет вам отменять загружаемые изображения с помощью метода - (void)cancelCurrentImageLoad;.

Вы должны использовать этот метод в методе prepareForReuse UITableViewCell.

person runmad    schedule 07.04.2014
comment
Спасибо за ваш комментарий, но я не использую UIImageView, я использую ABTableViewCell для рисования ячейки и повышения производительности при загрузке большого количества ячеек, поэтому я использую SDWebImageDownloader, чтобы загрузить изображение на фоне, а затем обновить изображение ячейки, а не изображение внутри UIImageView. Тем не менее, я попробую вместо этого использовать SDWebImageManager. - person estemendoza; 07.04.2014
comment
Вау, этот способ очень устарел. Если вы повторно используете ячейки, добавление подвидов в вашу ячейку больше не является большой проблемой. Этому коду и блогу почти 4 года, и они действительно актуальны. Я бы рекомендовал использовать подпредставления UIImageView и UILabel. Пока вы повторно используете ячейки и не выполняете никаких сумасшедших вычислений в cellForRowAtIndexPath:, вы все равно будете видеть прокрутку со скоростью 60 кадров в секунду. - person runmad; 07.04.2014
comment
Да, я знаю, что оно действительно старое, но моему приложению нужно было поддерживать iOS 4 и новее и работать на 3GS и новостном сервере, но, к счастью, мы отказываемся от этого и поддерживаем iOS 6 и новее, поэтому я, вероятно, заменю способ, которым я m создание этой ячейки - person estemendoza; 08.04.2014
comment
Ого, iOS 4?! Согласно новым данным, iOS 7 составляет более 85%. Теперь вам даже не придется спорить ни о чем, кроме поддержки iOS 7 ☺️ Удачи! - person runmad; 08.04.2014