Problème avec un NSOutlineView

'soir !



Je suis en train de mettre en place un genre de liste "à  la iTunes". A savoir une NSOutlineView (object graphique Source List) avec deux groupes et quelques items dans chaque groupe. J'ai deux classes qui me permettent de gérer le modèle de données pour ces informations (mais je ne pense pas qu'il est intéressant d'aller plus dans le détail).



Mon Outline View s'affiche très bien, avec mes données. Parfait. J'ai ajouté un petit bouton, qui ouvre une sheet qui permet à  l'utilisateur d'ajouter un item dans un des deux groupes. J'ajoute un premier item, parfait, ça roule. Et quand je veux ajouter un deuxième item, le contenu de tout un de mes groupe disparait !



La première image montre, de gauche à  droite, mon Outline View "de base", puis après ajout d'un premier item (Toto 1) et après ajout d'un deuxième item (Toto 2).



Ne sachant pas trop par où empoigner le problème, j'ai mis des log dans les différentes méthodes DataSource et Delegate de cet OutlineView. Et j'ai comparé ces logs après ajout de Toto 1 et après ajout de Toto 2. Comme on peut le voir sur la deuxième image, les méthodes appelées ne sont pas les mêmes !!!



Quelqu'un aurait une piste à  me donner pour investiguer plus loin ? Je suis un peu perdu !





Merci !

Réponses

  • olofolof Membre
    janvier 2013 modifié #2
    [font=arial, helvetica, sans-serif]Vu le peu de réponse que suscite mon message, je pense qu'il est juste trop vague ou qu'il manque d'information...



    J'ai fait une petite modification qui m'a fait avancé, mais juste un tout petit peu.



    A la base, c'est après avoir ajouter l'item dans mon modèle que je fessait un "ReloadData" sur mon OutlineView. J'ai supprimer ce "ReloadData" et l'ai mis derrière un bouton. Résultat, la même chose. J'ajoute un item, je fais le "ReloadData" -> ok. J'ajouter un deuxième item, je fais un "ReloadData", mais liste est vide. Autre essai, j'ajoute un premier item, puis un deuxième et seulement après je fais un "ReloadData". Liste vide !



    Après, j'ai ajouté la possibilité d'ouvrir et de fermer mes groupes "Recettes" et "Personnel" (avec la méthode delegate "isItemExpandable"). J'ajoute mes deux items, je ferme le groupe et je l'ouvre et là  mes items s'affichent ! Y'a-t-il autre chose à  faire qu'un simple "ReloadData" après avoir ajouter des items dans le modèle ?







    Merci ![/font]
  • Je viens de faire un autre test sur le projet de démo Apple SidebarDemo. J'y ai ajouter un bouton derrière lequel je fais un "ReloadData" sur l'OutlineView.



    L'image jointe montre, à  droite, avant le "ReloadData" et à  gauche, après le "ReloadData" !!! Comme vous le voyez, les icônes ont changés !!! Est-ce que cette méthode doit être évitée ? Y'a-t-il un autre moyen de recharger la liste !?!?!?



    Merci !
  • Je joins le projet SidebarDemo d'Apple avec le modification que je décris dans mon post précédent. Si une bonne âme a le temps de l'essayer et de me dire si le résultat est le même que chez moi...





    Merci !
  • Alors si ça intéresse quelqu'un, j'arrive à  un meilleur résultat en utilisant la méthode reloadItem: reloadChildren:. Par contre, j'ai toujours quelques comportements étranges...
  • 'olof' a écrit:


    Je viens de faire un autre test sur le projet de démo Apple SidebarDemo. J'y ai ajouter un bouton derrière lequel je fais un "ReloadData" sur l'OutlineView.



    L'image jointe montre, à  droite, avant le "ReloadData" et à  gauche, après le "ReloadData" !!! Comme vous le voyez, les icônes ont changés !!! Est-ce que cette méthode doit être évitée ? Y'a-t-il un autre moyen de recharger la liste !?!?!?




    J'ai eu plus de succès sur StackOverflow (http://stackoverflow.com/questions/14425936/strange-behavior-with-apple-sidebardemo). En gros, la démo d'Apple utilise le même objet pour chaque item de la SourceList, ce qui n'est pas très correct...



    Ca explique le pourquoi du comment pour la démo d'Apple, mais pas pour mon problème (je créé un nouvel objet pour chaque item). Mon test suivant a été de passer par les bindings. Et là , ça fonctionne tout de suite mieux.



    Je suis quand même assez étonné d'avoir été confronté à  ces petits problèmes pour développer quelque chose qui me semble assez courant et pour lequel il existe un objet dans la librairie de IB !!!
  • CéroceCéroce Membre, Modérateur
    C'est tout le problème de la programmation sur Mac.

    Déjà , il n'y a pas de correspondance entre les noms dans l'éditeur de XIB et les propriétés des classes.



    Ensuite, on ne comprend pas bien comment configurer chaque instance: pas mal d'options ont été ajoutées au fil des versions, mais les valeurs par défaut font ressembler ça à  une appli de l'an 2001.
  • Et c'est vrai que ça n'aide pas le débutant ! C'est quand même dommage qu'on puisse tomber sur des démo officielles Apple et qu'elles soient codées "avec les pieds" ! J'imagine bon nombre de débutants se baser sur ces démos pour essayer de développer quelque chose de plus gros...
  • CéroceCéroce Membre, Modérateur
    février 2013 modifié #9
    Les programmes d'exemple sur Mac sont souvent une catastrophe. Codés avec les pieds comme tu le signales, et de plus, il y a rarement des exemples simples. NSOutlineView en est une bonne illustration: le programme d'Apple montre tout ce qu'on peut faire avec en bidouillant et qu'on ne fera jamais. Alors qu'on souhaiterait avoir une illustration simple du fonctionnement de base.



    Heureusement, sous iOS, dans l'ensemble, la situation s'est beaucoup améliorée.
Connectez-vous ou Inscrivez-vous pour répondre.