2013-04-04 3 views
0

Проблемы с асинхронными изображениями не знают, почему возникает эта странная проблема. Я применяю технологию загрузки асинхронных изображений, но изображения не замерзают после загрузки при прокрутке, они снова загружаются.Загрузка асинхронных изображений снова и снова в ячейках Uitableview

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell=[self getCellContentView:CellIdentifier]; 
    } 
    [cell setBackgroundColor:[UIColor redColor]]; 
    NSLog(@"%i",[discussionArray count]); 
    NSDictionary *dict=[discussionArray objectAtIndex:indexPath.row]; 
    UILabel *textLabel1 = (UILabel *)[cell viewWithTag:1]; 
    UILabel *textLabel2 = (UILabel *)[cell viewWithTag:2]; 
    UILabel *textLabel3 = (UILabel *)[cell viewWithTag:3]; 
    UIImageView *avatarimage = (UIImageView *)[cell viewWithTag:4]; 
    UIImageView *new_oldimage = (UIImageView *)[cell viewWithTag:5]; 
    UIImageView *avatarimage_cover = (UIImageView *)[cell viewWithTag:6]; 

    textLabel1.text =[dict objectForKey:@"user"]; 
    textLabel2.text =[dict objectForKey:@"date"]; 
    textLabel3.text =[dict objectForKey:@"text"]; 

    NSString *photoStrn=[dict objectForKey:@"photo"]; 
    avatarimage.image = nil; 
    dispatch_async(dispatch_get_global_queue(0,0), ^{ 
     NSString *u=[NSString stringWithFormat:@"http://%@",photoStrn]; 
     NSURL *imageURL=[NSURL URLWithString:u]; 
     NSData *imageData = [NSData dataWithContentsOfURL:imageURL]; 
     dispatch_sync(dispatch_get_main_queue(), ^{ 
      UIImage *dpImage = [UIImage imageWithData:imageData]; 
      if (dpImage==nil) 
      { 
       dpImage = [UIImage imageNamed:@"profileImage.png"]; 
      } 


      [UIView animateWithDuration:5.0 animations:^{ 
       avatarimage.alpha = 1.0; 
      }]; 
      avatarimage.image = dpImage; 

     }); 

    }); 

    avatarimage_cover.image = [UIImage imageNamed:@"avtrcover.png"]; 

    NSString *new=[dict objectForKey:@"new"]; 
    if ([new isEqualToString:@"0"]) 
    { 
     new_oldimage.image = [UIImage imageNamed:@"old_message.png"]; 
    } 
    else 
    { 
     new_oldimage.image = [UIImage imageNamed:@"new_message.png"]; 
    } 

    textLabel3.numberOfLines = 0; 
    NSString *detailText = [[discussionArray objectAtIndex:indexPath.row] objectForKey:@"text"]; 
    CGSize textSize = [detailText sizeWithFont:[UIFont boldSystemFontOfSize:13] constrainedToSize:CGSizeMake(240, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap]; 
    textLabel3.frame = CGRectMake(70, 53, 240, textSize.height+detailTextoffset); 
    return cell; 


} 

ответ

0

Вы устанавливаете avatarimage.image на ноль каждый раз, когда ячейка настроена. Вы вызываете код загрузки независимо от того, что. Таким образом, неудивительно, что вы продолжаете перезагружать изображение.

Вместо этого вы должны поддерживать изменяемый массив загружаемых изображений. Это могут быть только URL-адреса файлов для изображений где-то в папке документов. Если изображение существует, используйте его, если не загрузите его.

if (imageArray[indexPath.row]) { 
    // use the image to populate the image view 
} 
else { 
    // fetch async from server 
} 
+0

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

0

это решит проблему. нажмите на ссылку ниже:

Image on top of Cell

+0

связал это, но не работал для меня :( –

+0

это невозможно. Можете ли вы показать мне свой код –

Смежные вопросы