Précisions sur le File's Owner

skimpyskimpy Membre
10:47 modifié dans API AppKit #1
Bonjour,

Je viens de découvrir votre site et je débute en Cocoa / Obj-C. J'ai parcouru la section "Glossaire des termes" afin d'identifier ceux qui me posaient le plus de problème. Malgré la définition donnée, je n'arrive pas à  voir à  quoi correspond le "File's Owner".

Est-ce que quelqu'un pourrait me donner un cas réel d'utilisation ?

Merci.

Réponses

  • BruBru Membre
    10:47 modifié #2
    Concrètement, le file's owner est tout simplement l'objet qui est passé en paramètre de la méthode loadNibNamed:owner:.

    Pour le mainNib (celui chargé automatiquement au démarrage d'une appli cocoa), le owner est l'application elle-même.

    Pour tout autre nib chargé au cours de l'appli, c'est n'importe quel objet, généralement un objet de type contrôleur général.

    L'avantage est que toutes les méthodes que fournit le owner sont exposées dans IB, et donc directement exploitables dans IB en tirant des liens (CTRL-CLIC puis DRAG).

    .
  • skimpyskimpy Membre
    10:47 modifié #3
    Merci Bru pour ta réponse. Par contre j'aimerais avoir encore des petites précisions :

    - Est-il judicieux d'affecter au File's Owner du MainMenu.nib une autre class que NSApplication et quel en est l'intêret ?

    - Dans un autre fichier NIB, quelle différence y a-t'il entre instancier une classe (afin de faire les liaisons entre la vue et l'instance) et affecter la classe au File's Owner pour faire la même chose ?

    - Connaissez-vous des exemples ou des tutoriels à  faire afin de se rendre bien compte du rôle tenu par File's Owner ?

    Merci.
  • BruBru Membre
    10:47 modifié #4
    dans 1139169918:

    - Est-il judicieux d'affecter au File's Owner du MainMenu.nib une autre class que NSApplication et quel en est l'intêret ?


    Le MainMenu.nib s'appelle MainMenu car il contient la barre des menu de l'appli.
    Beaucoup d'options de menu que fournit la barre sont directement reliées à  des méthodes de NSApp (l'objet application). Par exemple, Quitter est relié à  terminate:, Masquer... relié à  hide..., etc.

    Tu peux changer le owner, mais alors ce sera à  toi (dans l'implémentation de ton propre objet) de répondre à  ces messages de la barre de menu et d'effectuer l'opération attendue.


    dans 1139169918:

    - Dans un autre fichier NIB, quelle différence y a-t'il entre instancier une classe (afin de faire les liaisons entre la vue et l'instance) et affecter la classe au File's Owner pour faire la même chose ?


    Prenons l'exemple d'une appli que tu veux développer. Dans cette appli, tu utilises une fenêtre que tu auras besoin d'afficher en plusieurs exemplaires (genre fenêtre document). Cette fenêtre sera dans un nib, que tu chargeras autant de fois qu'il te faudra de fenêtre. Le owner est idéal pour garder trace de chacune de ces fenêtre, car à  la différence d'un objet contrôleur inclus dans le nib, il est de ta responsabilité de créer ton owner avant de charger le nib. Or si tu le créés, tu peux en garder trace comme tu le veux.

    .
  • skimpyskimpy Membre
    10:47 modifié #5
    Imaginons que j'ai un fichier NIB avec comme File's Owner une class "Toto". Dans ce fichier NIB, j'ai une instance d'une classe "Titi".

    Tu veux dire que tant que je n'ai pas fait de loadNibName, l'instance Titi n'est pas créée ? Par contre, dès que je fais un :
    Toto * monToto = [[Toto alloc] init];

    cela instancie mon File's Owner (et je peux ainsi manipuler toutes les variables qui constitue ma classe Toto avant de charger le NIB) ?
  • 10:47 modifié #6
    exactement, mais il vaut mieux éviter de manipuler les variables qui seront instanciées dans le nib, car elles n'existent pas encore.
  • BruBru Membre
    10:47 modifié #7
    dans 1139218404:

    Imaginons que j'ai un fichier NIB avec comme File's Owner une class "Toto". Dans ce fichier NIB, j'ai une instance d'une classe "Titi".

    Tu veux dire que tant que je n'ai pas fait de loadNibName, l'instance Titi n'est pas créée ? Par contre, dès que je fais un :
    Toto * monToto = [[Toto alloc] init];

    cela instancie mon File's Owner (et je peux ainsi manipuler toutes les variables qui constitue ma classe Toto avant de charger le NIB) ?


    Oui, et même mieux.

    Dans cette même classe Toto, si tu as un [tt]IBOutlet id instanceTiti;[/tt] dans le .h, tu pourras dans IB relier ton instance Titi à  ton file's owner (en n'oubliant pas de mettre en custom-class du owner ta classe Toto).

    Après le loadNibName, l'outlet instanceTiti pointera automatiquement sur l'instance Titi du nib.

    .
  • skimpyskimpy Membre
    10:47 modifié #8
    Merci beaucoup pour vos réponses. Je commence à  y voir plus clair (même si ce n'est pas totalement limpide  B) ). Je vais maintenant pratiquer, je pense que ça rentrera encore mieux comme ça !

    En tout cas, encore merci ; j'ai découvert ce forum seulement hier et je le trouve vraiment génial.
Connectez-vous ou Inscrivez-vous pour répondre.