NSOperation для выполнения изображения ячейки uitableview - PullRequest
0 голосов
/ 02 июня 2011


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

EDIT:
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;

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

1 Ответ

1 голос
/ 03 июня 2011

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

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 обратно в главный поток, иначе у вас возникнут сбои.

...