Récemment, j'ai soudainement découvert que l'application iOS que j'avais écrite auparavant plantait parfois lors de l'actualisation.
J'ai vérifié le code et trouvé un bug. Les étapes qui mènent au bug sont les suivantes :
L'utilisateur déroule la table pour l'actualiser.
Effacez le NSArray qui contient les données.
Obtenez les données du réseau, puis remplissez-les dans NSArray.
Dans des circonstances normales, cela ne pose aucun problème.
Cependant, si l'utilisateur fait glisser la tableview pendant les étapes 2 et 3, elle plantera immédiatement.
Analysé les raisons. Lorsque j'efface le NSArray, le tableView n'appellera pas automatiquement numberOfItemsInSection pour obtenir le dernier nombre de données. S'il est extrait à ce moment-là, le tableview appellera cellForItemAtIndexPath pour obtenir une nouvelle cellule à ce moment-là, en raison du nombre de données. est 0, accès cellForItemAtIndexPath Les données seront hors des limites du tableau.
Je veux donc parler de la deuxième étape insérée au milieu de la troisième étape, c'est-à-dire qu'après avoir obtenu les données distantes, effacer le NSArray, puis le remplacer par les nouvelles données réseau, puis ajuster l'actualisation reloadData.
Mais cela aura toujours le bug d'origine. Avant d'appeler reloadData, le nombre de NSArray est différent du numberOfItemsInSection obtenu par tableView. C'est juste que l'intervalle de temps est plus court qu'avant.
Puis-je demander aux experts comment vous mettez à jour les données dans tableView. Comment atteindre une sécurité à 100 %.
Tant que les données changent, vous devez actualiser la tableView
Même si vous souhaitez effacer le contenu, vous pouvez l'actualiser lorsque vous avez terminé