Raffraichir l'affichage au démarrage
meall
Membre
Bonjour,
J'ai une petite application simple qui lit certaines données d'un array et le totu fait entièrement avec du binding. Vraiment cool, car le binding m'a fait sauver beaucoup de temps, mê^me si j'en ai perdu à comprendre la mécanique!
J'ai cependant un petit problème: lorsque j'ouvre l'application, pas tout les champs sont raffraichies. Ceux qui sont bindé sur mon array, aucun problème. Mais les autres sont calculés à partir des données de l'array, docn je voudrais refaire le calcul lorsque la fenêtre s'affiche la première fois. J'ai tenté d'appeler ma procédure de calcul dans le awakeFromNib, niet. J'ai regarder aussi du coté des notifications du NSWindow, mais c'est pas concluant. Le NSWindowDidUpdateNotification "update" la fenêtre seulement si je bouge la souris, et le fait d'ailleurs chaque fois que je bouge la souris inutilement. J'en ai essayé d'autres, mais pas plus agréable.
Bref, je cherche donc à faire les calculs de ma fenêtre à l'ouverture initiale, un truc simple que vous pouvez suggérer?
Merci
J'ai une petite application simple qui lit certaines données d'un array et le totu fait entièrement avec du binding. Vraiment cool, car le binding m'a fait sauver beaucoup de temps, mê^me si j'en ai perdu à comprendre la mécanique!
J'ai cependant un petit problème: lorsque j'ouvre l'application, pas tout les champs sont raffraichies. Ceux qui sont bindé sur mon array, aucun problème. Mais les autres sont calculés à partir des données de l'array, docn je voudrais refaire le calcul lorsque la fenêtre s'affiche la première fois. J'ai tenté d'appeler ma procédure de calcul dans le awakeFromNib, niet. J'ai regarder aussi du coté des notifications du NSWindow, mais c'est pas concluant. Le NSWindowDidUpdateNotification "update" la fenêtre seulement si je bouge la souris, et le fait d'ailleurs chaque fois que je bouge la souris inutilement. J'en ai essayé d'autres, mais pas plus agréable.
Bref, je cherche donc à faire les calculs de ma fenêtre à l'ouverture initiale, un truc simple que vous pouvez suggérer?
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Par exemple si tu as des TableViews, un petit [matableView reloadData] permet de forcer à recharger les données et mettre à jour la table pour faire correspondre l'affichage aux données.
Si c'est des popupmenus je crois que c'est pareil, ou dans le même gout, que reloadData.
Un setNeedsDisplay: sur des NSViews aussi si tu dessines des données.
etc...
Merci pour le truc, mais le résultat est le même. J'ai fait un setNeedsDisplay sur un NSTextField, mais niet, same results!
J'ai fait un test. J'ai mit un NSLog qui affiche un des NSTextField bindés (ce sont tous des NSTextField en passant) et lors de la sortie du awakeFromNib la valeur est encore à zéro. Je me suis donc mit a pensé: est-ce possible que l'affichage des binding se fait plus tard que le awakeFromNib? y a-t-il un équivalent de awakeFromBind ou une notification sur les bind?
Ceci dit, la méthode awakeFromNib est censée s'exécuter quand tout les outlets ont été connectés, donc je comprend pas ce problème, et comment y remédier proprement dès le début du développement. ???
[tt]
-(void)awakeFromNib
{
/*
...
*/
[self performSelector:@selector(finInit) withObject:nil afterDelay:0.1];
}
-(void)finInit
{
  // Remplissage des controls
}
[/tt]
drole de workarround... Si tel problème existe, je peux pas croire que nous somes les 2 seuls à l'avoir vécu et qu'Apple ne fera rien pour ça... :brule:
Cependant, je dois avouer, ça fonctionne! Merci pour le truc, je vais le retenir pour le futur...
Au moins je suis sûr que tout est "bien" chargé : )
Bonne idée, mais dans mon cas (je viens de l'essayer) il semble que les valeurs bindé sont encore nulle selon l'output du NSLog. Donc le résultat est le même...
Cepe3ndant, mes NSLog me montre que NSApplicationDidFinishLaunchingNotification est lancé après le awake from NIB. C'est déjà un départ, mais c'est encore trop vite...
J'ai utilisé la technique du performSelector:withObject:AfterDelay:, et cela fonctionne. Cependant, je me demandais si quelqu'un aurait une suggestion pour expliquer le problème?
Je rappelle le problème qui est quand même simple : des vues à remplir au démarrage de l'appli :
Un reloadData n'est pas efficace dans la méthode, mais si j'ajoute un performSelectorWithObjectAfterDelay (0.1 seconde) et que j'implémente la méthode appelée avec un simple reloadData cela fonctionne !! Cela paraà®t inimaginable qu'un cas aussi fréquent que de remplir des tables ou autres views au démarrage oblige à faire des bidouilles de timing !! Peut-être qu'une autre méthode doit être appelée et pas didFinishLaunching.