SDWebImage NSURLRequests прерывается с перерывами

Я загружаю изображения с удаленного сервера с помощью SDWebImage в UICollectionView, используя следующий код:

[myCell.imageView setImageWithURL:imgURL placeholderImage:nil options:SDWebImageRetryFailed success:^(UIImage *image) { [_imageCache storeImage:image forKey:[imgURL absoluteString] toDisk:YES]; } failure:^(NSError *error){ NSLog(@"ERROR: %@", error); }]; 

Для большинства ячеек этот код работает нормально – он загружает изображения и сохраняет их на моем локальном диске. Однако, после нескольких (кажется случайных?) Изображений, они перестают загружаться. Затем я получаю следующую ошибку:

 ERROR: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x1d33fdc0 {NSErrorFailingURLStringKey=http://path/to/image.jpg, NSErrorFailingURLKey=http://path/to/image.jpg, NSLocalizedDescription=The request timed out., NSUnderlyingError=0x1d34c0f0 "The request timed out."} 

Когда это произойдет, мое приложение перестает отправлять NSURLRequests вообще. Через некоторое время, возможно, около 20-30 секунд, я смогу обновить таблицу, и файлы с ошибками загрузятся правильно, и приложение вернется к ответам на все NSURLRequests совершенно нормально.

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

Догадаться. Я использовал MWPhotoBrowser в другой части моего приложения. MWPhotoBrowser поставляется со старой / модифицированной версией SDWebImage. Я загрузил последнюю версию SDWebImage из Github, переименовал / реорганизовал все файлы и импортировал обновленный и модифицированный SDWebImage вместе с одним MWPhotoBrowser.

Новая версия SDWebImage решила мою проблему полностью!

Лучше использовать асинхронную загрузку с помощью диспетчера разделов и отображение при завершении загрузки с помощью SDWebImage. Теперь вы можете быстро прокрутить, чтобы проверить.

 - (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { MyCell *myCell = (MyCell *)[cv dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath]; //Set placeholder myCell.imageView.image = [UIImage imageNamed:@"placeholder.png"]; NSURL *cellImageURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[self.collectionData objectAtIndex:indexPath.row]]]; [myCell.cellIndicator startAnimating]; SDWebImageManager *manager = [SDWebImageManager sharedManager]; [manager downloadWithURL:cellImageURL delegate:self options:0 success:^(UIImage *image, BOOL cached) { //Display when finish download myCell.imageView.image = image; [myCell.cellIndicator stopAnimating]; } failure:nil]; return cell; } 

* EDIT: если проблема еще не решена на устройстве: попробуйте разделить загрузку и отображение

 @interface ViewController () @property (retain , nonatomic) NSMutableArray *linksArray; @property (retain , nonatomic) NSMutableArray *imagesArray; @end - (void)viewDidLoad { [super viewDidLoad]; [self initLinksArray]; //Add placehoder.png to your imagesArray [self initImagesArray]; //Download to NSMultableArray [self performSelectorInBackground:@selector(downloadImages) withObject:nil]; } - (void)initImagesArray{ self.imagesArray = [[[NSMutableArray alloc] init] autorelease]; for (NSInteger i = 0; i < self.linksArray.count; i++) { [self.imagesArray addObject:[UIImage imageNamed:@"placeholder.png"]]; } } - (void)downloadImages{ for (NSInteger i = 0; i < self.linksArray.count; i++) { NSURL *cellImageURL = [NSURL URLWithString:[self.linksArray objectAtIndex:i]]; SDWebImageManager *manager = [SDWebImageManager sharedManager]; [manager downloadWithURL:cellImageURL delegate:self options:0 success:^(UIImage *image, BOOL cached) { [self.imagesArray replaceObjectAtIndex:i withObject:image]; } failure:nil]; } } - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return [self.imagesArray count];; } - (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { SDCell *cell = (SDCell *)[cv dequeueReusableCellWithReuseIdentifier:@"SDCell" forIndexPath:indexPath]; cell.cellImageView.image = [self.imagesArray objectAtIndex:indexPath.row]; return cell; } 
  • iPhone - Ширина пути, основанная на скорости касания
  • Использование макроса SEC_IS_BEING_DEBUGGED_RETURN_NIL в приложении iOS
  • Xcode не распознает iPhone 5s, dyld_shared_cache_extract_dylibs не удалось
  • iOS ota Ad-hoc distribution - Профилирование?
  • Английские локализованные файлы не загружаются
  • Как построить FFMpeg как iOS Framework
  • AVPlayer не будет воспроизводить звук iOS8
  • iOS - что связано с созданием разрешенных приложений «white label» iOS?
  • Раскадровка не обновляет свой дизайн в последней версии xcode
  • Как я могу установить didEndOnExit в коде, а не в Interface Builder?
  • XCode не открывает организатор
  • Interesting Posts

    Различные динамические ссылки для разных приложений в одном проекте / консоли / учетной записи firebase

    UIView backgroundColor с изображением

    Каков наилучший шаблон проектирования для повторного использования UITableView со многими источниками данных?

    Значение base64String decoding возвращает nil

    UIButton не будет показывать название

    Форматирование NSString – строка по имени строки

    нет экземпляра UICollectionViewLayoutAttributes для -layoutAttributesForDecorationViewOfKind

    Facebook и iOS Войти Ошибка с января 2012 года – Даже с ShareKit или SDK

    Facebook Graph API iOS tag friend whit SLRequest

    Как я могу добавить два изображения uiimageview и сохранить его в галерее фотографий iphone в разработке приложений iphone?

    Как добавить пользовательские данные в маркер (API-интерфейс API Карт Google)

    Подождите несколько событий в iOS?

    «aps-environment» имеет значение, не разрешенное профилем инициализации

    свойство теряет свою ценность (долго, но легко понять)

    Использует ли Assign сокращение объема используемой памяти?

    Давайте будем гением компьютера.