2013-03-13 9 views
2

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

dispatch_async(dispatch_get_global_queue(0,0), ^{ 
    NSData * data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"website.com"]]; 
    if (data == nil) 
     return; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     cell.imageView.image = [UIImage imageWithData:data]; 
    }); 
}); 

Я получил этот код: Getting Image from URL Objective C.

Как это исправить? также есть ли способ ускорить скорость загрузки?

+1

как они смешиваются? – Raptor

+0

Никто не сможет вам помочь, если вы не разместите (остальную часть) вашего кода. Как называется этот код? Что такое 'cell'? Неважно, что вам, вероятно, будет лучше использовать NSURLConnection, чтобы вы могли контролировать кеширование и тому подобное. –

+0

Надеюсь, ответ Пратика поможет вам, но проблемы с указанным выше кодом включают в себя 1. Вы не проверяете, чтобы к тому времени, когда изображение закончило загрузку, ячейка не прокрутила и повторно использовалась для другой строки в Таблица; и 2. если вы не инициализируете образ ячейки с помощью заполнителя перед началом асинхронного поиска, вы увидите изображение из предыдущей строки, для которой использовалась эта ячейка. По соображениям производительности вы также захотите кэшировать свои изображения (в ОЗУ и постоянное хранилище). Вероятно, проще всего использовать проверенную стороннюю библиотеку. – Rob

ответ

6

Вы можете использовать файлы класс «AsyncImageView» будет загрузить изображение синхронно, и это показывает индикатор активности при загрузке изображений

AsyncImageView класса файл, в котором он будет создавать соединение для каждого вызова, и когда данные изображений ЗАГРУЖАЯ завершено он вернет изображение для просмотра изображений. и если изображение уже находится в кеше, просто верните изображение без создания соединения.

Вы можете скачать "AsyncImageView" файлы классы из следующей ссылки: - https://www.dropbox.com/s/peazwjvky9fsjd7/Archive.zip

в .m файл импорт AsyncImageView класса

#import "AsyncImageView.h" 

в вашем Tableview камере в методе indexpath

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"SimpleTableCell"; 
    UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(X, y, width, height)]; 

    NSString *imageURL = [NSString stringWithFormat: @"www.xyz.image.png"]; 
    AsyncImageView *async = [[AsyncImageView alloc]initWithFrame:CGRectMake(0, 0, width, height)]; 
    [async loadImageFromURL:[NSURL URLWithString:imageURL]]; 
    [imageView addSubview:async]; 
    [cell addSubview:imageView]; 
    return cell; 
} 

попробуйте, ваша проблема будет решена.

+0

Это все прекрасно и денди, но можете ли вы объяснить код, который вы только что вставляли здесь, или вы просто связываетесь с каким-то кодом, который в конечном итоге умрет и никому не поможет? – CodaFi

+0

AsyncImageView - это файл класса, в котором он будет создавать соединение для каждого вызова, и когда загрузка изображений будет завершена, он вернет изображение для просмотра изображений. и если изображение уже находится в кеше, тогда просто возвращайте изображение без создания соединения. – Pratik

+0

обновите свой ответ. Объяснения - это разница между голосов и голосов. – CodaFi

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

  • Нет связанных вопросов^_^