ios tableView reloadRowsAtIndexPaths ne fonctionne pas
J'ai un problème lorsque j'ai un UITableViewController
et lorsque la vue s'affiche je fais quelques calculs de manière asynchrone qui devrait se traduire par la mise à jour des lignes spécifiques dans le tableau.
À l'intérieur de la viewWillAppear
fonction que j'ai calculer le nécessaire lignes qui doivent être mis à jour comme suit:
- (void)reloadPaths:(NSMutableDictionary *)bookingsDict
{
NSMutableArray* indexArray = [NSMutableArray array];
int i = 0;
for (NSString *dateKey in self.eventsToShow) {
NSMutableDictionary *venues = [bookingsDict objectForKey:dateKey];
if (venues) {
int j = 0;
NSArray *events = [self.eventsToShow objectForKey:dateKey];
for (DCTEvent *event in events) {
NSString *venueIdString = [NSString stringWithFormat:@"%@", event.eventVenueId];
if ([venues objectForKey:venueIdString]) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:j inSection:i];
[indexArray addObject:indexPath];
}
j++;
}
}
i++;
}
[self.tableView reloadRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationFade];
}
Cependant, je remarque que le cellForRowAtIndexPath
fonction n'est jamais appelée après et les cellules ne sont pas mises à jour correctement. Toute idée de ce que le problème peut être?
EDIT: je viens de remarquer que si je défilement de l'affichage de la cellule qui est censé être mis à jour, puis il est mis à jour quand je revenir en arrière dans la vue. Il n'y a pas moyen de l'avoir mise à jour, tandis qu'en vue?
indexArray
contient des données valides?C'est ce que je vois dans le débogueur: po indexArray <__NSArrayM 0xd0c3a40>( <NSIndexPath: 0xd0dffa0> {longueur = 2, path = 15 - 0} )
En fait je viens de remarquer que si je scroll un peu, puis la cellule est mise à jour. Je suppose que cela signifie que les cellules actuellement en vue de ne pas obtenir les mises à jour jusqu'à ce que vous faites défiler loin d'eux?
non...il ne plante pas. Il n'a tout simplement pas de mise à jour jusqu'à ce que je défilement de la cellule en dehors de la vue.
Vérifier ma réponse ici pour voir si cela vous aide à: stackoverflow.com/a/41551850/4546370
OriginalL'auteur Atul Bhatia | 2014-05-19
Vous devez vous connecter pour publier un commentaire.
Comment au sujet de l'envelopper?
Ici sont quelques-uns des problèmes similaires, j'ai trouvé.
cellForRowAtIndexPath n'est pas appelé après reloadRowsAtIndexPaths
UITableView de reloadRowsAtIndexPaths: (NSArray *) indexPaths à défaut de provoquer une recharge, sauf si vous appelez deux fois?
Espère que cette aide.
reloadRowsAtIndexPaths
avecself.tableView.beginUpdates()
etself.tableView.endUpdates()
il a travaillé. Quelqu'un peut m'expliquer pourquoi de début et de fin est-elle nécessaire ?OriginalL'auteur Hsin Chang
MODIFIER : je pense que vous êtes de ne pas obtenir de indexPath vérifiez la section peut être constante que vous êtes en augmentation alors que chaque objet se traversés:
Essayez ceci :
Vérifier si indexArray a tout indexpath ou pas?
non, la section est variable. Si je change reloadRowsAtIndexPaths simplement à reloadData il fonctionne très bien.
Je pense que reloadData après reloadRowsAtIndexPaths est la seule façon de travailler.
OriginalL'auteur Paresh Navadiya
Pour moi de pousser mon rechargement code de la file d'attente principale résolu le problème
OriginalL'auteur Heysem Katibi