Je rencontre un problème où tableView:numberOfRowsInSection:
est appelé, puis d'autres méthodes sont appelées qui affectent le tableau sous-jacent, puis tableView:cellForRowAtIndexPath:
est appelé et se bloque car le contenu du tableau sous-jacent est différent que lorsque numberOfRowsInSection
a été appelé. Si le cadre appelle numberOfRowsInSection
juste avant d'appeler cellForRowAtIndexPath
, il n'y aurait pas de problème. Comme je ne peux pas m'attendre à un correctif dans le framework à court terme, la solution la plus simple que je recherche est de renvoyer une cellule fictive si le tableau sous-jacent ne contient pas l'entrée demandée.CellForRowAtIndexPath se bloque après avoir été appelé beaucoup plus tard que numberOfRowsInSection
Plus de détails sur la façon dont ce problème se produit:
- application utilise un contrôleur de barre d'onglets.
- Le contrôleur racine de chaque onglet est un
UINavigationController
. - Le contrôleur de vue en question est appelé en le poussant sur la pile de navigation du contrôleur de navigation de l'élément de la deuxième barre d'onglets.
- La méthode viewWillAppear du contrôleur de vue en question réinitialise le groupe sous-jacent, puis appelle
[_tableView reloadData]
. - Le délégué de l'application qui implémente UITabBarControllerDelegate implémente la méthode
tabBarController:didSelectViewController:
et appellepopToRootViewControllerAnimated:
sur le contrôleur de vue sélectionné. - La méthode viewWillAppear du contrôleur de vue racine appelle une méthode sur le contrôleur de vue en question qui affecte le contenu du tableau sous-jacent.
étapes pour REPRO le problème:
- application Démarrer.
- Appuyez sur le deuxième élément de l'onglet.
- Appuyez pour afficher le contrôleur de vue en question. Effectuez un travail sur cette vue pour remplir la table.
- Appuyez sur le premier élément de l'onglet.
- Appuyez sur le deuxième élément.
A l'étape cinq, voici l'ordre des appels:
- viewControllerInQuestion: viewWillAppear - rechargements tableau sous-jacent, appelle [_tableView reloadData]
- viewControllerInQuestion: numberOfRowsInSection - renvoie 1
- App délégué: didSelectViewController - appels popToRootViewControllerAnimated
- secondTabBarRootViewController: viewWillAppear - appelle la méthode sur viewControllerInQuestion qui efface con tentes du tableau sous-jacent
- viewControllerInQuestion: cellForRowAtIndexPath - se bloque en essayant d'accéder à l'objet à l'index 0 dans le tableau sous-jacent.
Merci pour toute aide que vous pouvez me donner.