Communication entre deux nibs

muqaddarmuqaddar Administrateur
18:30 modifié dans API AppKit #1
Salut,

Je souhaiterais qu'un second nib, dont le file's owner a été personnalisé par une classe prefsController dans "custom class", puisse accéder à  l'instance unique de ma classe mainController qui est dans le premier nib.
Le problème, c'est que je ne vois pas comment faire sans créer un instance ds IB de prefsController dans ce premier nib, chose que je ne veux pas faire, puisque je veux instancier par le code au moment opportun, et non ds IB.

Comment procéder dans ce cas ?

Réponses

  • ChachaChacha Membre
    18:30 modifié #2
    Salut,

    J'ai m'étais posé la même question il y a quelque temps :
    http://www.objective-cocoa.org/forum/index.php?topic=627.0

    Faut chercher un peu, avant de poster, hein ! Ah, ces nouveaux  ;)

    +
    Chacha
  • muqaddarmuqaddar Administrateur
    18:30 modifié #3
    Hum... je suis pas sûr d'avoir trouvé mon bonheur dans ces explications...

    (pour la recherche, je fais ce que je peux, mais je suis sur 33,6K en ce moment et c'est douloureux...) :-)
  • ChachaChacha Membre
    18:30 modifié #4
    dans 1122236638:

    Hum... je suis pas sûr d'avoir trouvé mon bonheur dans ces explications...

    Ah, zut j'ai peut-être mal compris, alors.

    Ce que j'ai compris :
    Dans un NIB A, tu as une instance de mainController.
    Dans un NIB B, ton file's owner est un prefController, et tu charge ce NIB dynamiquement.
    Toi, tu veux que le prefController voie le mainController, mais tu ne peux pas "tirer un câble".

    Ce qui me vient à  l'esprit :
    pas besoin de IB, tout ce passe dans le code. Il suffirait que quand tu crées ton PrefController, tu lui indiques qui est le mainController. Mais dans ton code, tu ne sais pas y accéder ?
    Le mainController, il est bien en un seul exemplaire ? Ce que tu peux faire, c'est créer un singleton (expliqué dans l'autre thread), stocké dans une variable theMainController, par exemple.
    Pour accéder à  cette variable, tu crées une méthode de la classe MainController :
    <br />@implementation MainController<br />static MainController* theMainController;<br />+(MainController*) mainController<br />{<br />&nbsp; return theMainController;<br />}<br /><br />//et toutes les méthodes pour le singleton<br />@end<br />
    


    Ainsi, on obtient très facilement cette variable.
    <br />PrefController* pc = [[PrefController alloc] init...];<br />[pc setMainController:[MainController mainController]];<br />
    


    Voili voilà 

    +
    Chacha
  • muqaddarmuqaddar Administrateur
    juillet 2005 modifié #5
    Oui, c'est ça qui m'intéressait.
    Ce que je ne comprenais pas, c'est qu'on fasse un singleton du mainController, alors qu'il était déjà  instancié dans IB...


    EDIT :

    Ce que je veux dire, c'est que je croyais que créer un singleton était l'opération qui permet de créer une instance unique, alors que visiblement, c'est celle qui permet de récupérer une instance unique.
  • ChachaChacha Membre
    juillet 2005 modifié #6
    dans 1122274577:

    Ce que je veux dire, c'est que je croyais que créer un singleton était l'opération qui permet de créer une instance unique, alors que visiblement, c'est celle qui permet de récupérer une instance unique.


    Mmmm... Pour que tout soit bien clair, je rajoute quelques précisions:
    -un singleton, c'est l'instance d'une classe (un objet, donc) qui ne peux exister qu'en un seul exemplaire. Si on essaye de réinstancier la classe, l'objet qu'on récupère doit être celui déjà  créé. Il faut donc trafiquer le -(id) init.
    -pour récupérer cette instance, on a mille et une façon, qui n'ont rien à  voir avec le singleton. Une méthode de classe, par exemple, mais on pourrait envisager d'autres façons. (par exemple, une fonction C globale, pourquoi pas ?) Là , c'est au programmeur de décider.

    +
    Chacha
  • muqaddarmuqaddar Administrateur
    18:30 modifié #7
    Ok, merci chacha pour ces précisions.
Connectez-vous ou Inscrivez-vous pour répondre.