Alternative à viewDidLoad
Hello,
Par souci pratique je dissocie ma sidebar outliview de la vue principal ce qui provoque quelques petits désagréments.
Je dois charger le contenu de la outline via awakenib avec une sorte de "rustine" pour que le comportement soit correcte.
Une idée d'alternative histoire que ce soit plus propre ?
Ca ressemble à ça pour le moment:
https://github.com/Old-Geek/Librairie/blob/master/Librairie/Sidebar/SidebarView.m#L68
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ne peux tu pas utiliser viewDidLoad du controller contenant la sidebar ?
Pourquoi fais-tu 5 fois setItemList ?
J'ai pas fait de viewcontroller (appdelegate only)
parce qu'en dessous de 3 ça ma laisse une vue vide, 3 c'est aléatoire + marge ocazou
PorkZ inside
T'as essayé viewDidMoveToWindow ou viewDidMoveToSuperview (pour exécuter setItemList) ?
Je viens de tester et le résultat est assez surprenant, pour l'un ça décale l'affichage sélectionné sur un autre item et l'autre ça m'affiche celui que j'avais sélectionné 2 clicks auparavant
Mouaip, me suis résigné a créé un maincontroller avec un delegate...
C'est toujours mieux que mon système de rustine.
Ce qui est étonnant c'est que awakeFromNib est appelé plusieurs fois alors qu'il ne devrait être appelé qu'une seule fois par instance issue du NIB (enfin je crois). J'ai regardé un peu le code et j'ai une petite question: pourquoi ta classe SideBarView * fait-elle référence à une autre instance de *SidebarView ? La seule instance dans la fenêtre devait être amplement suffisante non ?
De ce que j'ai observé, awake ne se charge jamais une seule fois.
Sur un outline, c'est chargé autant de fois qu'il y a d'item défini dans l'array. Quand il y un scroll pour afficher ce qui n'est pas encore visible awake est reloadé autant de fois que ce qu'il y a à afficher.
En utilisant des tableview défini manuellement avec des cells ça permet une mise à jour en temps réelle des données comme je le fais ici: https://github.com/Old-Geek/MPD-Client/blob/master/MPD Client/Views/Playlist/PlaylistViewController.m#L56
Si j'ai bien compris, c'est soit cette méthode soit gérer ça en passant par interfacebuilder mais le click click me donne des boutons. Tu ne vois rien, tu ne sais pas ce que tu fais, c'est beaucoup moins flexible et ce que tu gagne en temps sera perdu ailleurs.
.> @Lexxis a dit :
Je ne vois pas de quoi tu parles O_o
Le plus simple c'est de pas utiliser awake pour remplir tes données
tu crée un méthode fillData()
tu l'appelles quand ton app est chargé dans applicationDidFinishLaunching
Merci pour l'info, je vais regarder ça de plus près.
Ton fichier NIB fait apparaitre deux instances de SibBarView, une en tant qu'objet "indépendant", l'autre dans la fenêtre. Le premier ayant une référence (outlet) sur le second. Je trouvais cela étrange mais cela est peut être fait à dessein.
Ah oui, c'est une erreur
Effectivement tu as raison. awakeFromNib est appelé sur le owner lors d'un appel à makeViewWithIdentifier même si ce dernier est déjà initialisé.
J'ai fait quelques tests sur ton code:
Résultat: plus besoin de la rustine viewDidLoadCompensation.
J'ai déjà modifé ça, j'ai créé un MainWindowController, collé un delegate "viewloaded" qui est envoyé à Sidebarview. awakeFromNib a été supprimé
https://github.com/Old-Geek/Librairie/blob/master/Librairie/MainViewController.m
Je viens de faire un push pour mettre à jour le git.
Pour le reste il ne faut pas faire trop gaffe, ce n'est que du bricolage non définitif, une ébauche. Comme j'y connais rien, j'y vais à taton
Non, malheureusement, awakeFromNib est parfois appelé plusieurs fois... Il semble me rappeler qu'il arrive que ce soit le cas sans même que l'objet ne soit initialisé.