0

Как загрузить несколько небольших изображений с сервера с базовой аутентификацией HTTP и загрузить их асинхронно в UICollectionView. Код ниже хорошо работает для сервера без какой-либо аутентификации, но файлы будут храниться за Basic auth.Загрузить изображения UICollectionViewCell через аутентифицированный NSURLConnection

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    BrowseCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath]; 

    int row = [indexPath row]; 

    NSString *fileName = [files objectAtIndex:row]; //NSArray *files 
    NSString *filePath = [thumbDir stringByAppendingPathComponent:fileName]; 

    if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
    { 
     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
     dispatch_async(queue, ^{ 
      NSString *strURL = [NSString stringWithFormat:@"http://www.somethng.com/thumbs/%@", fileName]; 
      NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]]; 
      [data writeToFile:filePath atomically:YES]; 
      dispatch_sync(dispatch_get_main_queue(), ^{ 
       if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
        cell.imageView.image = [UIImage imageWithContentsOfFile:filePath]; 
       [cell setNeedsLayout]; 
      }); 
     }); 
     cell.imageView.image = [UIImage imageNamed:@"placeholder.png"]; 
    } 
    else 
    { 
     cell.imageView.image = [UIImage imageWithContentsOfFile:filePath]; 
    } 
    cell.imageName = fileName; 

    return cell; 
} 

Как я совмещаю NSURLConnection, который охватывает authenticationChallenge с cellForItemAtIndexPath методом для того, чтобы загрузить все изображения в клетку, как только он загружен?

Имеет ли смысл подкласс NSURLConnectionDelegate и отправить indexPath для перезагрузки ячейки из этого другого класса? Есть ли лучший способ сделать это?

ответ

1

Лично я использую this library при загрузке и кешировании изображений. Реализация выполняется так же легко, как:

cell.imageView setImageWithURL:[NSURL URLWithString:[[NSString stringWithFormat:@"http://www.somethng.com/thumbs/%@", fileName] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]; 

В библиотеке будут храниться изображения для вас. Вы также можете использовать методы блоков в библиотеке, если вам нужно знать, когда загружено изображение.

+0

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

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