Rafraichir tableView
Salut tout le monde.
VOilà j'ai un petit probème. J'ai une tabBar qui contient des tableView. Tout est chargé des le démarrage dans le delegate. En suite je fais un ajout dans un BDD et le resultat doit se voir sur une tableView. Le soucis c'est qu'il faut que je redémarre l'app pour que le résultat se voit. J'ai eu beau faire :
et ensuite dans mon InfoViewController :
Mais comme tout est chagé au départ ça ne sert à rien ce n'est pas ré-appelé...
Auriez-vous une idée? :-\\
Merci !
VOilà j'ai un petit probème. J'ai une tabBar qui contient des tableView. Tout est chargé des le démarrage dans le delegate. En suite je fais un ajout dans un BDD et le resultat doit se voir sur une tableView. Le soucis c'est qu'il faut que je redémarre l'app pour que le résultat se voit. J'ai eu beau faire :
<br />/* Notre méthode se trouvant dans le delegate on déclare une variable de cette classe */<br /> iOrygeenAppDelegate *appDelegate = (iOrygeenAppDelegate *)[[UIApplication sharedApplication] delegate];<br /> /* j'insere, les résultats devant s'afficher sur mes ligne de tableView */<br /> [appDelegate insererBDD:selectedAliment withGlucide:glu protide:pro lipide:lip kCalori:kcal andDate:theDate];<br /> <br /> /*je rafraichi justement mon tableView */<br /> InfoViewController *monInfoController = [[InfoViewController alloc]init];<br /> [monInfoController.infoTable reloadData];<br /> <br /> /* rien à faire ça veut pas ... */<br />
et ensuite dans mon InfoViewController :
<br />-(void)viewWillAppear {<br /> [self.infoTable reloadData]; <br />}<br />
Mais comme tout est chagé au départ ça ne sert à rien ce n'est pas ré-appelé...
Auriez-vous une idée? :-\\
Merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu rafraà®chis ton tableView mais à mon avis il manque du code pour rafraà®chir son datasource, c'est lui qui est mis à jour. Et je suppose que le datasource est alimenté par la BDD donc même si la BDD a évolué, il faut rafraà®chir aussi le datasource.
Je dirais plutôt, comment le remplis-tu toi ?
Après dans mon JourViewController je récupère les infos dans le -(void) viewDidLoad grâce au NSMutableArray que j'ai rempli.
Affiche dans un log le contenu de ce NSMutableArray dans viewDidLoad de ton controller, je pense qu'il n'est pas rafraà®chi après l'enregistrement d'un nouveau record.
Je ne sais pas comment tu le charges ce MutableArray mais il ne doit pas être chargé après les insertions.
Dans le viewDidLoad, essaie un truc du genre : [appDelegate readHistoriqueFromDatabase];
Ensuite, n'oublie pas que les controllers ne sont pas forcément rechargés par les tabBarControllers. Il y a une méthode delegate de tabBarController qui peut s'en occuper.
J'ai mis un NSLog dans mon viewdidLoad quand je remplis mon tableau final. Mon premier clique sur le tabBar correspondant imprime bien tout. Ensuite je vais rajouter une valeur et quand je reclique sur mon tabBar rien ne s'affiche, le viewDidLoad n'est pas pris en compte.
Tu peux recharger tes données avec la méthode delegate dont je t'ai parlée plus haut :
Il y a déjà une discussion sur ce sujet dans le forum.
J'ai bien fait tout ce que tu m'a indiqué muqaddar mais on dirait qu'il ne veut rien savoir sur la méthode reloadAllData...
Dans mon appDelegate .h j'ai
dans le .m
Après dans mon JourViewController :
.h
.m
Voilà je pense que j'ai à peu près résumé la situation. S'il manque un truc dites le moi :-\\
Ce paquet là :
Tu appelles reloadAllData par le viewDidLoad la première fois qu'il est chargé et par le delegate du tabBarController dont je t'ai déjà parlé les autres fois pour le refresh.
Mais il faut aussi que l'accesseur historique recharge bien les données de ta table.
J'ai donc rempli mon reloadAllData avec une partie de ce que j'avais dans le viewDidLoad. J'appelle cette méthode dans mon viwDidLoad : [self reloadAllData];
Ca marche.
Après comment tu me l'as préciser avant je fais dans mon delegate :
Là j'ai toujours le crash de mon app avec comme message :
-[UINavigationController reloadAllData]: unrecognized selector sent to instance 0x121c10
Pourtant reloadAllData est bien déclarer. J'ai essayé en mettant juste un NSLog dans mon reloadAllData et même là ça plante, l'appel est mauvais on dirait.
Est-ce que c'est pareil? En tout cas ça ne crash plus mais ca ne rafraichi pas non plus.
C'est sans doute du dernier point donc tu parlais. Pourrais-tu m'expliquer plus en détail sur celui-ci ?
Tu crée une nouvelle instance, et tu ne prends pas celle qui est sélectionnée dans la tabBar.
Montre le code complet de la méthode delegate de tabBarController de cet aprem, j'ai l'impression qu'il récupère pas la bonne instance du controller selectionné pour appeler reloadAllData.
Tu crées un conrôlleur, le rafraà®chit... et hop le détruit ?
Moi j'achète rarement une voiture juste pour la nettoyer et la mettre à la casse direct ensuite sans l'utiliser...
Celle de cette aprem?
J'avais mis ça :
et ça
Mais toi, c'est le numéro 1, le 0 ou autre ??
Du coup, tu appelles une méthode sur le mauvais controller... et paf le chat. :(renaud):
edit : oui c'est ça (j'étais pas sur mon mac)
Tu crois ? lol
Bon, alors il faut ajouter une étape supplémentaire.
Comment veux-tu qu'il sache quel controller rafraichir si ce controller est le premier du navigation controller, et non directement un view controller ?
Dans la même méthode du delegate, il faut récupérer le premier controller de ton navigation controller que tu as créé (le root controller).
Mais un marqueur ou plusieurs et direction le debugger, y'a pas 36 solutions.
Mets aussi des marqueurs dans reloadAllData.
Comme ça, tu verras si c'est le bon contrôleur qui est appelé, et si ça plante, je pense que c'est parqu'il est releasé.
J'ai fait un NSLog pour voir si c'était bien le bon. Voici une petite vidéo
C'est donc bien le bon que je sélectionne , non?
Quand je décommente ma ligne c'est fini ça crash. Je suis dépité je vois pas pourquoi là .
if([myViewController respondsToSelector:@selector(reloadAllData)]) {
NSLog(@responds);
}
NSLog((@%@",[myViewController class]);