Изображения меняются при прокрутке таблицы в iphone? - PullRequest
0 голосов
/ 13 июня 2011

Я использую XML для извлечения данных и отображения их в удобном для пользователя виде.В XML у меня есть отдельный тег для изображения как «ссылка».Я отображаю это изображение как изображение ячейки.Когда приложения загружаются, все работает нормально, но когда я прокручиваю таблицу, изображения в ячейке меняются.

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
        cell.accessoryType=UITableViewCellAccessoryNone;
        cell.selectionStyle=UITableViewCellSelectionStyleNone;
        //cell. separatorStyle=UITableViewCellSeparatorStyleNone;

        titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(110, 10, 190, 130)];
        [titleLabel setTag:2];
        titleLabel.numberOfLines=7;
        [titleLabel setFont:[UIFont systemFontOfSize:14]];
        [titleLabel setTextColor:[UIColor blackColor]];
        [titleLabel setBackgroundColor:[UIColor clearColor]];
        [cell.contentView addSubview:titleLabel];
        [titleLabel release]; 


        imageView= [[UIImageView alloc] initWithFrame:CGRectMake(5, 20, 90, 110)];
        [cell.contentView addSubview:imageView];
    }

    NSDictionary *appRecord = [responseArr objectAtIndex:indexPath.row];

    NSString *urlLink;
    urlLink=[NSString stringWithFormat:@"%@",[appRecord objectForKey:@"link"]];
    NSLog(@"LINK : %@",urlLink);

    if([urlLink length] ==0)
    {
        imageView.image=[UIImage imageNamed:@"ioffer.png"];

    }
    else {

    NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlLink]];
    UIImage *image = [[UIImage alloc] initWithData:imageData];
    imageView.image = image;

    }   

    UILabel *desclbl = (UILabel*)[cell.contentView viewWithTag:2];
    desclbl.text = [NSString stringWithFormat:@"%@",[appRecord objectForKey:@"description"]];


    return cell;

}

Я использовал этот код в cellForRowAtIndexPath таблицы.responseArr - массив, в котором я хранил ссылки.

Может ли кто-нибудь помочь мне в этом вопросе.

Заранее спасибо, Малати

Ответы [ 4 ]

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

Вы также используете вместо этого пользовательскую ячейку и проверяете каждый раз, как указано ниже. Пример- Условие-

    if(shout.creator.avatarImage){
        avatarView.image = shout.creator.avatarImage;
    }
    else{

        FetchImageOperation *operation = [[FetchImageOperation alloc] init];

        operation.delegate = self;
        operation.urlString = shout.creator.avatarURL;

        [operationQueue addOperation:operation];
        [operation release];
    }

-(void)fetchthumbImageOperation:(FetchThumbImageOperation *)operation didFetchImage:(UIImage *)image

{
    avatarView.image= image;

}

Here, i check the condition for image in tableview data source.

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

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

Если вы повторно используете существующую ячейку табличного представления, т. Е. Код пропускает первый блок if, тогда imageView не инициализируется (в любом случае, где оно объявлено?). Это означает, что даже если вы установили новый текст, какое-то случайное изображение используется повторно.

Исправление состоит в том, чтобы убедиться, что imageView инициализирован во всех случаях.

И, пожалуйста, объявите это локально в этом методе. Все остальное кажется мне очень опасным.

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

«Подразумеваемое еще» if (cell == nil) заключается в том, что он повторно использует ячейку из кэша таблицы. Он ничего не сбрасывает, просто подбирает их и использует. Это означает, что любой элемент, который у вас есть, должен быть очищен вручную, особенно если пройдет некоторое время, прежде чем он будет заполнен.

Вы уже делаете некоторые дефолты, здесь:

if([urlLink length] ==0)
{
    imageView.image=[UIImage imageNamed:@"ioffer.png"];

}

Если вы просто сделаете это НЕ условным, то есть просто скажете

    imageView.image=[UIImage imageNamed:@"ioffer.png"];

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

СЕЙЧАС: Вы загружаете это изображение синхронно. Это означает, что весь ваш пользовательский интерфейс будет зависать во время выполнения веб-запроса. Не отлично.

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

У меня была такая же проблема.Ячейки повторно используются по другому индексу при прокрутке.Попробуйте поместить код, который заполняет ячейки данными, вне "if (cell == nil)".Работал на меня.

С уважением, Александр

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