2010-02-20 5 views
0

Qu'est-ce qui provoquerait cela?UITableView groupé affiche bien, mais seulement une fois

J'ai un tableViewView groupé que j'ai ajouté dans IB. 2 groupes. 3 rangées dans chaque groupe.

Il s'affiche très bien lorsque mon application est lancée pour la première fois. (Donc, je sais que je fais QUELQUE CHOSE.) Est-ce que cela ne signifie pas que mon (ma) délégué (e), DataSource, IBOutlets et mes connexions sont correctement configurés?)

Mais quand je clique sur un bouton qui appelle [myTable reloadData] il se bloque juste. Initialement, je pensais que c'était en raison de mes changements dans le nombre de groupes, le nombre de lignes, ou de modifier les données dans ma source de données (juste un petit NSMutableArray).

Mais la même chose se produit lorsque je ne change PAS de données: Fonctionne correctement la première fois que ma tableView est affichée. Mais se bloque quand j'appelle [myTable reloadData]. (Que les données aient changé ou non.)

J'ai réduit mon code à un strict minimum ... en essayant de trouver ce bogue.

 

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIndentifer = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifer]; 

    if(cell == nil) 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIndentifer] autorelease]; 

    cell.textLabel.text = @"Left Test"; 
    cell.detailTextLabel.text = @"Right Test"; 

    return cell; 
} 

Voici le code bouton-clic:

 
-(IBAction) reloadTable:(id)sender 
{ 
    if(myTable == nil) 
     NSLog(@"myTable is nil"); 
    else 
     [myTable reloadData]; 
} 

Voici la "erreur" (aucune aide):

 
[Session started at 2010-02-19 10:04:14 -0100.] 
GNU gdb 6.3.50-20050815 (Apple version gdb-967) (Tue Jul 14 02:11:58 UTC 2009) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "i386-apple-darwin".sharedlibrary apply-load-rules all 
Attaching to process 1081. 
kill 
kill 
quit 

The Debugger has exited with status 0.(gdb) 

J'ai même essayé de coder en dur le " nombre de groupes "," nombre de lignes "," texte d'en-tête "," texte du pied "et" texte de la cellule ". (Au cas où mes calculs étaient erronés, calculer mon objectAtIndex ... ou j'avais un array-dataSource qui ne contenait pas assez d'éléments.)

Toujours le même problème: S'affiche bien la première fois. Crashes lorsque j'essaie de rechargerData.

+1

Afficher la méthode de clic sur le bouton et l'erreur exacte que vous obtenez. – DyingCactus

+0

 -(IBAction) reloadTable:(id)sender { \t if(myTable == nil) \t \t NSLog(@"myTable is nil"); \t else \t \t [myTable reloadData]; } 
Susanna

+0

StackOverFlow: * S'IL VOUS PLAÎT * arrêter de reformater mes commentaires. * S'IL VOUS PLAÎT * arrêter d'interdire html dans les commentaires. * S'IL VOUS PLAÎT * arrêter de limiter mes commentaires à "extrêmement court". Pouce. – Susanna

Répondre

0

Eh bien, si myTable est nul, mais la tableview est sur l'écran, alors c'est un assez bon indicateur que vous n'avez pas votre IBOutlet correctement connecté. Je parie que si vous NSLog(@"%@", myTable); en viewDidLoad (après avoir appelé super, bien sûr), vous verrez (null) connecté à la console. Quand le UITableViewController se charge pour la première fois, la vue de table (accessible via [self tableView]) sera reloadData, c'est pourquoi cela fonctionne une fois, mais ne se rechargera pas (parce que votre prise n'est pas branchée).

Je voudrais simplement abandonner complètement la prise (sauf si vous n'utilisez pas un UITableViewController) et utiliser [self tableView].

+0

J'ai fait un redémarrage. J'ai fait une «construction propre». Déconnecté la prise myTable ... puis reconnectée. Le problème continue. Mon code "if (myTable == nil)" ne serait-il pas ... dans ma méthode de clic-clic ... empêche-t-il des problèmes "myTable pourrait être nul"? Mon appel NSLog() dans viewDidLoad donne: viewDidLoad (>) Que dois-je essayer d'autre? – Susanna

+0

Est-ce que mon code original d'allocation de cellule semble correct? La "cellule de réutilisation" doit-elle être auto-libérée ou non? Le "créer une nouvelle cellule" doit-il être auto-libéré ou non? – Susanna

+0

Même si myTable était nul (ce n'est pas le cas) ... ne serait-il pas totalement inoffensif d'appeler [myTable reloadData]? Cela provoquerait que tableView ne fasse rien. Au lieu de cela, je reçois un crash instantané. – Bonnie

Questions connexes