2010-09-02 7 views
0

J'ai une application qui a beaucoup de vues, y compris tableViews, mais l'un d'eux a un problème que je ne sais pas comment résoudre. Lorsque le constructeur de la cellule est appelée:Développement iPhone - Problèmes de construction de cellules

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

le paramètre cellForRowAtIndexPath: (NSIndexPath *) indexPath obtenir un nombre aléatoire et étrange. Je construis cette tableView de la même manière que les autres. Quelqu'un a une idée de ce qui se passe?

Merci, Claudio

Répondre

0

L'astuce pour indexPath utilise les propriétés UITableView extention indexPath.section et indexPath.row.

En d'autres termes, si vous avez une simple liste de chaîne:

self.data = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil]; 

puis à tableView:cellForRowAtIndexPath: que vous voulez faire:

cell.textLabel.text = [self.data objectAtIndex:indexPath.row]; 

Si vous avez un tableau dans un tableau:

self.data = [NSArray arrayWithObjects: 
       [NSArray arrayWithObjects:@"A.1", @"A.2", nil], 
       [NSArray arrayWithObjects:@"B.1", @"B.2", nil], 
       nil]; 

Ensuite, vous aurez envie de vérifier le section et row propre ty:

NSArray *strings = [self.data objectAtIndex:indexPath.section]; 
cell.textLabel.text = [strings objectAtIndex:indexPath.row]; 

Assurez-vous que vous retournez les bons numéros pour numberOfSectionsInTableView: et tableView:numberOfRowsInSection:.

+0

J'ai vérifié à la fois (indexPath.section et indexPath.row) et les deux sont corrects. Mais quand il essaie d'imprimer la première cellule, indexPath vient avec un nombre étrange (nombre aléatoire, mais chaque fois quelque chose comme 95622992). Où est exactement défini indexPath avant d'être appelé? – Claudio

+0

indexPath lui-même est un pointeur vers un endroit aléatoire dans la mémoire, donc si vous avez essayé d'imprimer l'indexPath, ce serait un grand nombre. Pour utiliser indexPath, vous devez utiliser ses propriétés ou méthodes. Si vous voulez imprimer des objets sur la console, utilisez '% @' dans une chaîne de format. Comme 'NSLog (@" indexPath =% @ ", indexPath);' –

+0

Oui, c'était exactement ce que vous avez dit. Merci beaucoup! – Claudio