при прокрутке в ipad происходит сбой uitableview - PullRequest
1 голос
/ 01 июня 2011

Привет, все, что я реализовал, настроив UITableViewcell с приведенным ниже кодом. Каждая ячейка загружена четырьмя изображениями.

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

static NSString *hlCellID = @"hlCellID";

UITableViewCell *hlcell = [tableView dequeueReusableCellWithIdentifier:hlCellID];
if(hlcell == nil) {
    hlcell =  [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:hlCellID] autorelease];
    hlcell.accessoryType = UITableViewCellAccessoryNone;
    hlcell.selectionStyle = UITableViewCellSelectionStyleNone;
    [hlcell.contentView removeAllSubViews];


}
//NSLog(@"the scetions is %@",sections);

int section = indexPath.section;


for(int i=0;i<4;i++){


    CGRect rect = CGRectMake(18+192*i, (4*indexPath.row)+50, 120, 150);

    if ((4*indexPath.row)+i>=[self.imagesToDisplay count]) {
        break;
    }
    UIImage *imageToDisplay=[UIImage imageWithData:[self.imagesToDisplay objectAtIndex:(4*indexPath.row)+i]];
    NSLog(@"The size of the image is:%@",NSStringFromCGSize(imageToDisplay.size));
    UIButton *button=[[UIButton alloc] initWithFrame:rect];
    [button setFrame:rect];

    [button setBackgroundImage:imageToDisplay   forState:UIControlStateNormal];
    [button setContentMode:UIViewContentModeCenter];

    NSString *tagValue = [NSString stringWithFormat:@"%d%d",indexPath.row,i];
    NSLog(@"the tag is %@",tagValue);
    button.tag = [tagValue intValue];
    NSLog(@"....tag....%d", button.tag);
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [hlcell.contentView addSubview:button];
    [button release];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(18+192*i,(4*indexPath.row)+100+70 , 100, 100)] ;
    label.text = @"price $0.99";
    label.textColor = [UIColor blackColor];
    label.backgroundColor = [UIColor clearColor];
    label.textAlignment = UITextAlignmentCenter;
    label.font = [UIFont fontWithName:@"ArialMT" size:12]; 

    [hlcell.contentView addSubview:label];
    [label release];


}


return hlcell;

}

для каждого изображения действует как uibutton. Я пытаюсь загрузить около 1000 изображений. Эти изображения я беру с сервера. Когда одно изображение загружается в мое приложение, я обновляю общую ячейку.

NSIndexPath *indexPath=[NSIndexPath indexPathForRow:ceil((float)[gridView.imagesToDisplay count]/4)-1 inSection:0]; NSArray *cellIndexPath=[NSArray arrayWithObjects:indexPath,nil]; [gridView.tableview reloadRowsAtIndexPaths:cellIndexPath withRowAnimation:UITableViewRowAnimationNone];

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

1 Ответ

0 голосов
/ 01 июня 2011

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

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

Лучшее решение вашей проблемы - внедрить UITableViewCell, разделив его на подклассы и установив изображения вручную. Кроме того, реализовать

- (void)prepareForReuse

метод класса для выпуска изображений, которые отображаются в данный момент. См. Ссылку для получения дополнительной документации UITableViewCell

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