[Résolu]Problème avec NSOutlineView

mybofymybofy Membre
décembre 2013 modifié dans API AppKit #1

Bonjour


 


J'essaie d'utiliser NSOutlineView.


J'ai trouvé un exemple : http://www.alauda.ro/2012/04/30/nsoutlineview-inside-out/


Je l'ai simplifié au maximum et ça marche.


Je tente de construire une application identique à  partir de zéro.


 


Problème.


J'insère dans la fenêtre une NSOutlineView. Mais si je veux la connecter, Xcode me propose NSScrollView, voire NSClipView ou NSTableHeaderView selon le niveau.


Evidemment, setDataSource n'est pas reconnu puisque c'est une méthode de NSOutlineView et donc mon application plante.


 


Comment faire pour avoir un IBOutlet NSOutlineView ?


 


Merci


Réponses

  • AliGatorAliGator Membre, Modérateur
    Plutôt que de la connecter sur la vue au centre de l'écran d'IB, au risque que ce soit difficile si plusieurs vues se superposent ou bin sont constituées d'une hiérarchie complexe comme NSOutlinevie, tu peux tirer ton outlet de l'arborescence hiérarchique qui est dans la partie gauche de IB comme ça tu pourras tirer ton outlet depuis exactement l'objet/la vue que tu veux.
  • Merci


     


    Dans la partie données de la NSOutlineView, il "suffit" de cliquer 3 fois : le ctrl+tirer fournit bien un outlet NSOutlineView.


    Ta méthode est effectivement plus simple, maintenant que je l'ai comprise.


     


    Nouveau problème.


    J'ai donc copié tout pareil l'application simplifiée - qui marche - dans une application à  partir de zéro.


    Je bloque sur 



    OutlineViewController *ovc = [[OutlineViewController alloc] init];
    [_outline setDataSource:(id<NSOutlineViewDataSource>)ovc];


    J'ai le message "Build Succeded", puis à  l'exécution :



    return NSApplicationMain(argc, argv); Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)


    Le problème vient bien de "[_outline setDataSource:...", car si je commente cette ligne il n'y a plus d'erreur.


     


    Autant que je sois capable de le faire, j'ai vérifié que les paramètres de build sont les mêmes.


     


    Une piste ?


     


     


     




  • Merci


     


    Dans la partie données de la NSOutlineView, il "suffit" de cliquer 3 fois : le ctrl+tirer fournit bien un outlet NSOutlineView.


    Ta méthode est effectivement plus simple, maintenant que je l'ai comprise.


     


    Nouveau problème.


    J'ai donc copié tout pareil l'application simplifiée - qui marche - dans une application à  partir de zéro.


    Je bloque sur 



    OutlineViewController *ovc = [[OutlineViewController alloc] init];
    [_outline setDataSource:(id<NSOutlineViewDataSource>)ovc];


    J'ai le message "Build Succeded", puis à  l'exécution :



    return NSApplicationMain(argc, argv); Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)


    Le problème vient bien de "[_outline setDataSource:...", car si je commente cette ligne il n'y a plus d'erreur.


     


    Autant que je sois capable de le faire, j'ai vérifié que les paramètres de build sont les mêmes.


     


    Une piste ?




     


    Faudrait que tu nous montre tes fichier OutlineViewController.h et OutlineViewController.m


     


    pour voir d'ou bien ton crash ou bien fait nous un petit zip du prog

  • Tu peux aller chercher l'application à  :


     


    https://github.com/mybofy/OutlineExemple.git




  • Tu peux aller chercher l'application à  :


     


    https://github.com/mybofy/OutlineExemple.git




     


    Le bug vient de  ta variable locale ovc qui est libéré par ARC a la sortie de la méthode awakeFromNib d'ou le bug.


     


    Il faut la mettre en globale, sinon faire une propriété dans ta classe.

  • mybofymybofy Membre
    janvier 2014 modifié #7

    Dire qu'on apprend ça en maternelle maintenant !


     


    Merci à  tous


     


    PS :


    Voir le post http://stackoverflow.com/questions/8090224/example-of-how-to-implement-a-view-based-source-list-nsoutlineview-using-cocoa


    Je ne comprends pas tout, mais ça marche.


     


     


Connectez-vous ou Inscrivez-vous pour répondre.