2010-09-09 3 views
0

J'ai mis une image dans ma cellule tableview dans laquelle l'image est située dans une certaine URL .. Mon problème est que lorsque ma tableView affiche déjà les données, puis défilement la table view up & vers le bas, il faudra un certain temps ou de retard avant de réagir au défilement ..Image dans la cellule TableView provoque un retard lors du défilement

J'ai découvert le problème est dans l'image située dans l'URL et je dois également afficher chaque image dans le cellule tableview. Une idée de comment je peux le réparer? ou être optimisé?

Voici mon code:

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

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
} 

// Set up the cell 
NSUInteger row = [indexPath row]; 
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

NSArray *arrLocal = [m_list objectAtIndex:row]; 
if ([arrLocal count] > 0) { 
    cell.textLabel.text = [arrLocal objectAtIndex:2]; 
    cell.textLabel.font = [UIFont boldSystemFontOfSize:14]; 
    cell.detailTextLabel.text = [arrLocal objectAtIndex:3]; 
    cell.detailTextLabel.font = [UIFont systemFontOfSize:12]; 

      //sample url of the image: http://www.mysite.com/images/DealExtreme/2657_1_small.jpg 
    NSString *strTemp = [[NSString alloc] initWithString:@"http://www.mysite.com/"]; 
    NSString *urlString = [strTemp stringByAppendingString: [arrLocal objectAtIndex:1]]; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]]; 
    cell.imageView.image = image;  
    [strTemp release]; 
} 

return cell; 
} 

Répondre

0

Le problème est que vous téléchargez l'image à chaque fois cellForRow est appelée, je vous suggère de charger les images en arrière-plan ... Une façon de le faire est de rendre votre cellules personnalisées, demandez-leur d'avoir une méthode ou quelque chose de ce genre qui chargera l'image en arrière-plan puis la définir, une autre façon de charger toutes vos images en arrière-plan et de les conserver, puis de définir les images des cellules vous ne en rechargeant une image à chaque fois que la cellule est à l'écran ... espère que cela aide

+0

Oui, c'est ... Merci –

0

vous devez charger que les données d'image de façon asynchrone o r vous bloquez le thread principal. Vous voudrez certainement éviter cela. Cela rend votre application insensible, et si le délai est suffisamment important, votre application risque d'être facilement supprimée par le système d'exploitation.

Commencez donc à télécharger l'image en arrière-plan (en utilisant NSURLRequest et NSURLConnection) et actualisez le contenu de la cellule lorsque les données sont complètes.

+0

Merci pour l'info –

Questions connexes