[résolu] Comment deux NIB peuvent-ils être liés au même ArrayController ?

colas_colas_ Membre
avril 2013 modifié dans Objective-C, Swift, C, C++ #1

Voilà  mon problème :


  • J'ai deux NIB, avec deux NSViewController associés, appelons-les : MainViewController et SubViewController.

Dans MainViewController, j'utilise un ArrayController pour gérer mon affichage. Cet ArrayController est lié à  un NSArray appelé myEntries.


Mon deuxième NIB, SubViewController, est "chargé par le premier".

Je souhaiterais pouvoir lier des objets de SubViewController à  l'ArrayController de mon premier NIB.



Avez-vous des idées ?


Merci !


Réponses

  • Tu veux initialiser des propriétés de SubViewController juste après sa création à  l'aide de propriétés de ArrayController. C'est ça ?
  • J'ai un bouton dans SubViewController dont je veux que l'état enabled soit en binding avec le "canSelectNext" du arrayController qui est créé par MainViewController.



    Peut-être en créant une deuxième instance de ArrayController dans SubViewController, en l'écrasant pour copier celle de MainViewController et en se débrouillant pour que la "copie" soit au courant quand l'"original" est modifié.
  • CéroceCéroce Membre, Modérateur
    À mon avis, le plus simple est de déclarer
    @property (nonatomic, weak) NSArrayController *arrayController;


    dans le SubViewController.



    Dans MainViewController, une fois le SubviewController instancié, passe-lui le pointeur sur self.arrayController.

    Tu pourras alors binder sur self.arrayController dans SubviewController.xib.
  • HerveHerve Membre
    Dans le même ordre d'idées, si le second NSArrayController n'est pas instancié par le premier mais par le AppManager par exemple, tu fais ce que dis Céroce, puis tu "copies" le second NSArrayController dans le premier (dont tu as créé une classe dérivée bien évidemment) :
    <br />
    [monPremierArrayController setArrayController : monSecondArrayController];<br />




    Je n'ai jamais essayé avec ce type de classes, mais cela marche impec avec d'autres types comme la classe audio de TechnoDrive par exemple. Ainsi, toutes les autres classes ont un accès à  la classe qui gère l'audio.
  • CéroceCéroce Membre, Modérateur
    Attention avec le terme copier. Il a une signification précise, qui signifie envoyer un message -[copy] à  l'objet.



    En l'occurrence, ce n'est pas ce qu'on veut ici; mais qu'ils utilisent la même instance, donc on va passer une référence (le pointeur) sur le NSArrayController.
  • HerveHerve Membre
    Oui Céroce, merci pour cette précision. C'est bien la même instance de classe qui est utilisée lorsque j'utilise



    [maSousClasse setAudioManager...];
  • 'Céroce' a écrit:


    À mon avis, le plus simple est de déclarer
    @property (nonatomic, weak) NSArrayController *arrayController;


    dans le SubViewController.



    Dans MainViewController, une fois le SubviewController instancié, passe-lui le pointeur sur self.arrayController.

    Tu pourras alors binder sur self.arrayController dans SubviewController.xib.




    Je crois avoir testé ça et je crois que ça ne marchait pas.

    Du coup, j'ai trouvé une autre méthode, avec l'aide de lauderma : dire que le representedObject du SubviewController est le arrayController "d'en haut". Puis, les bindings se font avec : representedObject.selection
  • J'ai compris ce qui ne marchait pas : dans SubViewController, je créais une @property NSArrayController mais en plus je le déclarais comme IBOutlet et le faisais dormir dans le NIB...


     


     


    J'ai fait cette erreur car j'avais toujours vu les NSArrayController être créés via des NIB.


     


     


    Avec le recul, je vois bien que c'est pas logique et que ce n'est pas ce que Céroce m'avait dit de faire...


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