UITableView délégué méthode appelée deux fois
Aujourd'hui ma question est sur le UITableViewController-s
En particulier, j'ai remarqué que la source de données méthode du délégué
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
est appelé deux fois (même si, par exemple, je viens de créer une navigation en fonction de l'application, et sans ajouter une ligne de code.. bien que l'ajout d'un NSLog à suivre).
Maintenant, étant donné que dans mon application, j'ai besoin de déterminer le nombre de sections de baser le choix sur le ou les documents dans le système de fichiers, j'ai besoin d'appeler des méthodes pour le faire. J'ai mis ces méthodes dans la méthode ci-dessus, de sorte qu'ils seront appelés deux fois, ce qui est quelque chose que je n'ai pas besoin.
Les questions sont pourquoi est-il appelé deux fois, je peux avoir appelé une seule fois?
J'espère que dans la documentation officielle, ce n'est pas clairement établie (ce qui voudrait dire que je n'ai pas lu du tout 🙂 ). Par la manière dont je voyais les autres de poster des questions similaires, mais je ne pouvais pas trouver une réponse pleinement satisfaisante.
Merci.
Bonjour Reena, merci à yo pour votre attention. Que - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; est appelé deux fois. Tous les autres datasource délégué méthodes sont appelées autant de fois que vous le souhaitez. Par exemple: (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { est appelé n = (nombre de cellules visibles) et il est limité à (nombre de sections x nombre de lignes par section), à chaque fois que vous faites défiler et de la nouvelle cellule visible, elle est appelée. Le seul apparemment inexplicable double appel est pour le nombre de sections de la méthode...
U peut poster le code pour numberOfSectionsInTableView méthode?
Bien...bien sûr, mais je peux vous dire qu'il y a juste à staments: un NSLog déclaration et de " retour 3;' (peu importe le nombre, le même comportement). Dans le même temps, j'ai découvert que le problème est-il uniquement avec UITableViewController, lors de l'utilisation juste UITableView la méthode est appelée, juste une fois, comme prévu.
avez-vous jamais savoir pourquoi il en est? Ça m'arrive aussi. Exactement la même chose...
OriginalL'auteur user236739 | 2010-04-14
Vous devez vous connecter pour publier un commentaire.
Que je rencontrais le même problème, seulement avec l'appel à numberOfRowsInSection:
L'répondu jeté dans la trace de la pile pour chaque appel que j'ai reçu.
Le premier appel, en raison d'un changement dans la table en-tête de la vue, j'ai été prise dans le viewDidLoad: de mon viewcontroller.
Ce qui a entraîné l'appel interne à _updateContentSize: qui appelle heightForTable: qui finalement appelé numberOfRowsInSection:. C'était quelque chose que j'ai déclenché, et pourrait être facilement évité en n'agissant pas dans le code ci-dessus 🙂
Le deuxième appel a été la seule légitime pour reloadData. Ceci est déclenchée par une mise en page de l'événement quelque part, et très probablement, vous ne pouvez pas l'ignorer.
Je suis sûr que vous pouvez observer quelque chose de similaire pour les numberOfSections: méthode
Donc, ma conclusion est que, en raison de la mise en œuvre de la UITableView il existe de nombreuses situations où certains délégué méthodes seront appelés deux fois ou plus, parce que la vue de la table a pour actualiser quelque chose. J'essaie de concevoir mon code autour de ce bug/feature/etc.
Espère que cela aide
OriginalL'auteur
Si votre tableview est contenue par un enfant de-vue-contrôleur,
Essayez-le à votre mère ViewController
avant
[parentViewController.view addSubview:childViewController.view]
OriginalL'auteur
Veuillez vérifier votre code, après l'ajout de
TableView
vous pouvez de nouveau appelérealodData
méthode de table de mey êtreViewWillAppear
méthodeOriginalL'auteur
Cela peut se produire si vous r'vue de la table de l'image est modifié par erreur dans le story-board.Dire que vous avez cliqué sur le storyboard, lorsque vous avez ajouté l'affichage de la table comme une sous-vue et maintenant votre table peut ne pas avoir la bonne image que vous avez mis dans le début.
OriginalL'auteur