Je rencontre des problèmes pour afficher les résultats d'une source de données. Ce code montrera un résultat différent (et correct) dans la console, mais entraîne toutes sortes de conneries dans le simulateur.Problème de source de données de tableau Cocoa Touch
(« résultats » est une propriété NSMutableArray pour la classe.)
-(void) handleSearchForKeywords: (NSString *) keywords {
[results removeAllObjects];
int r = rand() % 10;
for(int i = 0; i < r; i++) {
[results addObject:[NSString stringWithFormat:@"test %i: %@", i, keywords]];
}
[self reloadTheTable];
}
-(void) reloadTheTable {
NSLog(@"current array contents: %@", results);
[tableView reloadData];
}
Je devine que cela pourrait avoir quelque chose à voir avec la conservation de la mémoire du tableau, ou les chaînes du tableau? J'ai peur de ne pas avoir compris.
[modifier en réponse à Marc Bessey - Je pense que tout est ici vos méthodes de DataSource de base]
-(NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) section {
return [results count];
}
-(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
static NSString *SearchViewControllerCell = @"SearchViewControllerCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: SearchViewControllerCell];
if(cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame: CGRectZero reuseIdentifier: SearchViewControllerCell] autorelease];
NSUInteger row = [indexPath row];
[cell setText:[results objectAtIndex:row]];
}
return cell;
}
Vous aviez raison. Le bit qui définissait le texte de la cellule se trouvait dans la boucle de mise en cache. if (cellule = nil) { cellule = [[[UITailViewCell alloc] initWithFrame: CGRectZero reuseIdentifier: blah] autorelease]; [cellule setText: [resultsAtIndex: row]]; } ^ faux –