NSOperation для выполнения изображения ячейки uitableview


Поскольку я новичок в разработке приложений для iPad, пожалуйста, помогите мне с простой проблемой.
Я хочу отображать изображения в табличном представлении с сервера. он отображается правильно.
Но когда я прокручиваю таблицу вверх и снова возвращаюсь туда, он снова загружает данные изображения с сервера.
Пожалуйста, помогите мне.

РЕДАКТИРОВАТЬ:
tableView:cellForRowAtIndexPath:

static NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
[cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 75)];
[imgView setImage:[UIImage imageNamed:@"strip_normal.png"]];
[imgView setHighlightedImage:[UIImage imageNamed:@"strip_hover.png"]];
[cell addSubview:imgView];
[imgView release];

UIImageView *imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 64, 64)];
imgView1.tag = indexPath.row;
UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.abc.com/abc/%@.png", [[arrMyCourses objectAtIndex:indexPath.row] valueForKey:@"CourseNumber"]]]]];
[imgView1 setImage:img];
[cell addSubview:imgView1];
[imgView1 release];

return cell;

Заранее спасибо.


person Mobile App Dev    schedule 02.06.2011    source источник
comment
Как вы сейчас реализуете tableView:cellForRowAtIndexPath:?   -  person Deepak Danduprolu    schedule 02.06.2011
comment
@Deepak, пожалуйста, посмотрите мой отредактированный вопрос.   -  person Mobile App Dev    schedule 03.06.2011


Ответы (1)


Ваша проблема в этой строке

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.abc.com/abc/%@.png", [[arrMyCourses objectAtIndex:indexPath.row] valueForKey:@"CourseNumber"]]]]];

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

Чтобы исправить это, вы должны загрузить их один раз в начале, сохранить их локально во временном месте и загрузить их в память по мере необходимости. Хранение всех их в памяти может быть дорогостоящим. Кроме того, переместите загрузку в фоновый режим с помощью performSelectorInBackground:withObject. Вам придется отправлять обновления UIKit обратно в основной поток, иначе у вас возникнут сбои.

person Deepak Danduprolu    schedule 03.06.2011
comment
Есть ли у вас какой-либо образец кода для этого, если да, то предоставьте мне, иначе я сделал это, но я не знаю, как отправить местоположение ячейки, а также URL-адрес для конкретной ячейки. Спасибо за ответ. - person Mobile App Dev; 03.06.2011
comment
В Интернете есть много ресурсов, которые показывают, как это сделать правильно. Here из примеров кода Apple. Вы также можете просмотреть this и this. - person Deepak Danduprolu; 03.06.2011