2010-04-14 4 views
14

Aujourd'hui, ma question porte sur UITableViewController-s En particulier, je l'ai remarqué que la méthode déléguée DataSourceUITableView méthode déléguée appelé deux fois

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 

est appelé deux fois (même si, par exemple, je viens de créer une application de navigation et sans ajouter une ligne de code .. bien en ajoutant un NSLog pour le suivre). Maintenant, puisque dans mon application, j'ai besoin de déterminer le nombre de sections en fonction du choix des documents dans le système de fichiers, je dois appeler quelques méthodes pour le faire. J'ai mis ces méthodes dans la méthode mentionnée ci-dessus, donc ils seront appelés deux fois, ce qui est quelque chose dont je n'ai pas besoin. Les questions sont pourquoi est-ce appelé deux fois, puis-je l'appeler une fois? J'espère que dans la documentation officielle, cela n'est pas clairement indiqué (ce qui signifierait que je ne l'ai pas lu du tout :)). En passant, je pouvais voir d'autres personnes poser des questions similaires, mais je ne pouvais pas trouver une réponse pleinement satisfaisante. Merci.

+1

avez-vous déjà trouvé pourquoi?Ça m'arrive aussi. Exactement pareil ... – Remover

+0

Je rencontre aussi ce comportement sur ios 4.2 dans xcode 4.1. Je n'arrive pas à identifier d'où vient cet appel, est-ce que quelqu'un a déjà trouvé une solution? Ou est-ce un bug? – Mellson

+0

Je vois également le même problème (où numberOfSectionsInTableView est appelé deux fois dans certaines circonstances). C'est avec iOS 4.2. – kennethmac2000

Répondre

11

Je rencontrais le même problème, uniquement avec l'appel à numberOfRowsInSection: La réponse fournie dans la trace de pile pour chaque appel reçu.

  1. Le premier appel est dû à un changement dans la vue d'en-tête de la table que je faisais dans le viewDidLoad: de mon viewcontroller.

    thumbView.tableHeaderView = nil; 
    thumbView.tableFooterView = nil; 
    

    Cela a donné lieu à un appel interne pour _updateContentSize: qui a appelé heightForTable: qui a finalement appelé numberOfRowsInSection:. C'est quelque chose que j'ai déclenché, et pourrait être facilement évité en ne faisant pas le code ci-dessus :)

  2. Le deuxième appel était légitime pour rechargerData. Ceci est déclenché par un événement de mise en page 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 qu'en raison de la mise en œuvre de UITableView il existe de nombreuses situations dans lesquelles certaines méthodes de délégués sera appelé deux fois ou plus parce que la vue de table doit actualiser quelque chose. J'essaie de concevoir mon code autour de ce bug/fonctionnalité/etc.

Hope it helps

+0

si je définis ou non -> thumbView.tableHeaderView = nil; thumbView.tableFooterView = nil; "numberOfSectionsInTableView" appelé 5 fois. Pourquoi ? –

2

Si votre tableview est contenue par un contrôleur de vue de l'enfant, essayer à votre parent ViewController

[parentViewController addChildViewController:childViewController]; 

avant [parentViewController.view addSubview:childViewController.view]

0

S'il vous plaît vérifier votre code, après avoir ajouté TableView vous pouvez encore appelé realodData méthode de table dans mey être ViewWillAppear méthode

0

Cela peut se produire si le cadre de vue de table est modifié par erreur dans le story-board.Si vous avez cliqué sur le storyboard où vous avez ajouté la vue de la table comme sous-vue et votre tableau peut ne pas avoir le cadre approprié ont mis au début.

Questions connexes