Изображение в ячейке TableView вызывает задержку при прокрутке - PullRequest
0 голосов
/ 09 сентября 2010

Я поместил изображение в свою ячейку таблицы, в которой оно находится в определенном URL-адресе. Моя проблема в том, что когда мой tableView уже отображает данные, затем прокручивая просмотр таблицы вверх и вниз, потребуется некоторое время или задержка, прежде чем она отреагирует на прокрутку ..

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

Вот мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

// Set up the cell
NSUInteger row = [indexPath row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

NSArray *arrLocal = [m_list objectAtIndex:row];
if ([arrLocal count] > 0) {
    cell.textLabel.text = [arrLocal objectAtIndex:2];
    cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
    cell.detailTextLabel.text = [arrLocal objectAtIndex:3];
    cell.detailTextLabel.font = [UIFont systemFontOfSize:12];

            //sample url of the image: http://www.mysite.com/images/DealExtreme/2657_1_small.jpg
    NSString *strTemp = [[NSString alloc] initWithString:@"http://www.mysite.com/"];
    NSString *urlString = [strTemp stringByAppendingString: [arrLocal objectAtIndex:1]];
    NSURL *url = [NSURL URLWithString:urlString];
    UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];
    cell.imageView.image = image;       
    [strTemp release];
}

return cell;
 }

Ответы [ 3 ]

0 голосов
/ 09 сентября 2010

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

Так что начните загружать изображение в фоновом режиме (используя NSURLRequest и NSURLConnection) и обновлятьсодержимое ячейки, когда данные полны.

0 голосов
/ 10 сентября 2010

Нашел эту ссылку http://www.markj.net/iphone-asynchronous-table-image/

что ответит на мою проблему. Работает отлично! Спасибо Маркдж! :)

0 голосов
/ 09 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...