UITableView de reloadRowsAtIndexPaths: (NSArray *) indexPaths à défaut de provoquer une recharge, sauf si vous appelez deux fois?
J'ai un UITableViewController la gestion d'un UITableView objet dans une application iPad. La vue de la table, est lié à une assez compliqué constellation d'autres objets. J'ai un problème quand je demande pour recharger une ligne comme suit:
//indexPath is an NSIndexPath with indexes 0 and 0. At the moment, this is the only cell in the table view.
NSArray *array = [NSArray arrayWithObject:indexPath];
[self.tableView reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone];
Le problème est que la ligne n'est pas rechargée. Il n'y a jamais un rappel à cellForRowAtIndexPath.
Le plus fou c'est que si je l'appelle reloadRowsAtIndexPaths deux fois, la deuxième appel ne déclencher la recharge:
//indexPath is an NSIndexPath with indexes 0 and 0. At the moment, this is the only cell in the table view.
NSArray *array = [NSArray arrayWithObject:indexPath];
[self.tableView reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone]; //does not reload
[self.tableView reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone]; //does reload
Je me demande si quelqu'un n'a jamais rencontré un bug de ce genre, et si oui, quelle en était la cause?
êtes-vous le faire dans certains thread d'arrière-plan?
Eu un cas de test?
Thread principal. Si par "cas de test", tu veux dire un exemple simple qui illustre la même chose, non, je n'en ai pas, et je veux je l'ai fait.
Ont le même problème, je suis en utilisant Xcode 6.3.2 et swift 1.2 et ne peut pas recharger certains ligne à partir d'un seul appel. Essayé presque tout, mais la cellule de se rafraîchir uniquement à partir de la deuxième séquentielle reloadRowsAtIndexPaths appel.
Eu de réponse pour le résoudre?
Eu un cas de test?
Thread principal. Si par "cas de test", tu veux dire un exemple simple qui illustre la même chose, non, je n'en ai pas, et je veux je l'ai fait.
Ont le même problème, je suis en utilisant Xcode 6.3.2 et swift 1.2 et ne peut pas recharger certains ligne à partir d'un seul appel. Essayé presque tout, mais la cellule de se rafraîchir uniquement à partir de la deuxième séquentielle reloadRowsAtIndexPaths appel.
Eu de réponse pour le résoudre?
OriginalL'auteur William Jockusch | 2011-04-05
Vous devez vous connecter pour publier un commentaire.
reloadRowsAtIndexPaths:...
ne fonctionne que lorsque enveloppé entre les deux appels à:En dehors de cela, le comportement est indéfini. (et comme vous l'avez découvert, assez peu fiable).
Edit: citation de la partie pertinente de la "Table View Guide de Programmation pour iPhone OS":
Ce problème m'a tué pour une semaine l'année dernière... Et il le fait dire, mais c'est enterré dans la vue de table guide de programmation, et non pas le document de référence.
ajout de la partie pertinente de apple docs. Ils mentionnent "sont liées à des méthodes décrites ci-dessus" C'est assez ambigu utilisation de la langue anglaise, mais dans la pratique, cela signifie que reloadRows... ne fonctionne qu'entre beginUpdates et endUpdates.
J'ai essayé d'emballage. Toujours le même comportement. Puis j'ai enroulé un de mes au plus tôt appels à reloadData comme vous l'avez suggéré. Et qu'il fixe.
Content que vous l'avez résolu. Un peu curieux de savoir si, comme
reloadData
est le seul reloadXXX méthode qui n'a pas besoin d'être enveloppé avec commencer/endUpdates...OriginalL'auteur amattn
Je sais que ce sujet est une sorte de vieux, mais je suis tombé sur le même problème et une solution simple. J'ai eu une vue de la table et quand j'ai appelé reloadData et/ou reloadRowsAtIndexPaths, la méthode tableview cellForRowAtIndexPath ne serait pas le feu.
Il s'avère que je n'avais pas branché mon tableview IBOutlet dans Interface Builder - une fois que cela a été accroché tout tiré comme prévu. C'est toujours les petites choses...
Aussi, comme d'autres l'ont mentionné, si vous n'avez besoin de la un appel, en l'enveloppant dans de commencer/endUpdates n'est pas nécessaire.
OriginalL'auteur R_B