Objectif C UITableView - les cellules d'un Tableau d'affichage mal de contenu après la modification de la cellule de hauteur

Je suis en train de construire une application dans xcode, qui -à côté des autres - lit un flux rss et affiche les messages. Je suis nouveau avec objective-c et de trouver un peu dur parfois.

- Je utiliser un NSMutableArray pour le récupéré les articles(posts). Chaque histoire est représenté par un NSMutableDictionary qui contient le titre, le sujet, la date et le lien du post. Tous ces sont affichés dans une UITableView dans un UIViewController.
J'ai personnalisé ma propre cellule, afin que je puisse afficher plusieurs étiquettes.

Mon problème est que si j'utilise tableView:heightForRowAtIndexPath:, les 5 premiers (cellules adapter à l'écran) affichage ok, mais si vous faites défiler vers le bas, à côté des cellules semblent avoir le même contenu avec les 5 premiers(c'est-à cellules 0-4 affichage ok, cellule 5 a contenu de la cellule 0, la cellule 6 de la cellule 1, etc)! Si je retire la tableView:heightForRowAtIndexPath: tout est très bien (sauf de ne pas avoir la taille de la cellule je veux)

Voici comment le code est:

// NavigationContentsViewController.h
@interface NavigationContentsViewController :
UIViewController <UITableViewDelegate, UITableViewDataSource> {

    UITableView *myTableView;
    IBOutlet UITableView * newsTable;
    UIActivityIndicatorView * activityIndicator;
    CGSize cellSize;
    NSXMLParser * rssParser;
    NSMutableArray * stories; 
    NSMutableDictionary * item; //it parses through the document, from top to bottom...

    NSString * currentElement;
    NSMutableString * currentTitle, * currentDate, * currentSummary, * currentLink;

}

@property(nonatomic,retain)NSMutableArray *itemsList;
@property(nonatomic,retain)UITableView *myTableView;
- (void)parseXMLFileAtURL: (NSString *)URL;

.

//NavigationContentsViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//Configure the cell.
static NSString *MyIdentifier = @"MyIdentifier";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil){
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
//Set up the cell 
int storyIndex = indexPath.row;
//[cell setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];
//Story title
//cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
//cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
cell.lTitle.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
cell.lSummary.text = [[stories objectAtIndex: storyIndex] objectForKey: @"summary"];
cell.lDate.text = [[stories objectAtIndex: storyIndex] objectForKey: @"date"];
return cell;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *selectedCellItem = [NSString stringWithFormat:@"%d", indexPath.row];
TableViewController *fvController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:[NSBundle mainBundle]];
fvController.selectedCellItem = selectedCellItem;
[self.navigationController pushViewController:fvController animated:YES];
[fvController release];
fvController = nil; 
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 80;
}

Des indices? [EDIT: changé int storyIndex = indexPath.ligne;]

Pourriez-vous expliquer pourquoi utilisez-vous int storyIndex = [indexPath indexAtPosition:[indexPath length] - 1]; au lieu de int storyIndex = indexPath.row;?
Si il y a des parties en cause, il ne obtenir un peu compliqué...dans ce cas, je vous recommande de créer plusieurs NSMutableArrays pour chaque section (mais encore une fois, vous aurez probablement à créer un plus grand éventail de les conserver, ou si elle devient trop grande, vous aurez à commencer à charger à partir du disque directement).
Tout d'abord merci pour les embêter avec mes question! Comme à l'écrit, c'est la première fois que j'ai à composer avec l'obj-c, donc il ya beaucoup de fois j'ai pu utiliser de mauvaises choses, ou de faire des choses avec une étrange manière. Il suffit de lire votre félicite, et je me sentais ridicule... de toute façon, cela ne changera rien à ma question 🙂
Je n'ai jamais utilisé indexAtPosition, et je ne suis pas sûr de quoi il en retourne, mais je suis assez certain que c'est le retour à l'index d'une cellule qui est actuellement sur les écrans, ce qui est la cause de vos problèmes. Si vous n'avez pas d'articles dans votre vue de la table, alors il suffit d'utiliser indexPath.ligne.
Je suis un peu confus. Comment est-ce que plusieurs NSMutableArrays résoudre le problème? En fait, il ne sera pas à le résoudre, je vais juste changer la manière de faire les choses. Pourquoi changer de cellule, la hauteur d'avoir à faire avec le contenu de la cellule? Ou heightForRowAtIndexPath n'a pas à le faire uniquement avec de la cellule de la hauteur? (En passant merci pour la réponse aussi)

OriginalL'auteur CdB | 2011-02-22