file's owner et liens entre plusieurs .nib

Bonjour à  tous
J'avoue que je ne sais pas vraiment ce que représente le mystérieux "file's owner" contenu dans chaque .nib
J'aimerais faire un lien entre un item d'un menu vers une méthode d'une classe instanciée dans un autre nib. Il me semble que c'est possible et que le mystérieux "file's owner" pourrait bien servir à  m'aider dans ce cas.
Merci pour votre aide.

Réponses

  • BruBru Membre
    22:32 modifié #2
    Il existe des milliers de solutions à  ton cas.

    File's owner en est une, mais ce n'est pas la plus élégante ici.

    Je ne vois pas trop l'intérêt à  appeller des méthodes IB dans des objets qui ne sont pas objet contrôleur (donc hors de portée du nib).
    Il y a une méconception de ton modèle MVC.

    Détaille nous un peu plus ce que tu veux faire...

    .
  • AliGatorAliGator Membre, Modérateur
    22:32 modifié #3
    Oui, asez d'accord là  dessus, ça semble bizarre que tu aies à  faire ça.
    Si tu as vraiment à  le faire, tu peux appeler une méthode de ton contrôleur de ton nib, et cette méthode va se contenter éventuellement d'appeler alors une autre méthode, par exemple celle de ton autre nib. Mais ça reste pas très propre.

    Sinon pour répondre à  la question, le "file's owner" correspond en gros à  l'objet qui a chargé le nib.
    Typiquement, si tu n'utilises qu'un seul nib dans ton application, automatiquement (mécanisme automatique de Cocoa) et de façon transparente, ton application charge le nib principal MainMenu.nib. Donc typiquement le "file's owner" de ton nib principal MainMenu.nib est ton application (NSApp).

    Si tu utilises plusieurs nib, alors pour charger un 2e nib typiquement tu fais :[tt][NSBundle loadNibNamed: owner:][/tt] en donnant le nom du nib que tu veux charger en mémoire (sans son extension ".nib"), et... le possesseur (owner) associé à  ce nib. Donc justement le file's owner.

    ---

    Par exemple tu crées un nouveau nib, dans l'onglet "classes" tu crées une classe qu'on va nommer par exemple "MyNibLoader", avec quelques IBOutlets et IBActions, et tu demandse de créer les fichiers pour cette classe.
    Enfin, tu indiques dans IB que le file's owner (de ton nib) a pour custom class justement "MyNibLoader" (et tu vas ainsi avoir les IBOutlets et IBActions disponible et pouvoir les relier dans IB).
    Au moment de charger ton NIB dans ton "programme principal", tu vas le charger ainsi :
    MyNibLoader* loader = [[MyNibLoader alloc] init]; // penser à  la release quand tu auras fini<br />// à  priori quand tu déchargeras le nib chargé ou dans le dealloc<br />[NSBundle loadNibNamed: @&quot;monNib&quot; owner:loader];
    
    Et il va tout seul "mapper" les outlets et actions du nib à  l'objet/instance "loader" (les outlets de "loader" pointeront bien sur les objets de l'interface dans le nib, etc).

    Bon ce n'est qu'un exemple mais pour te donner une idée du concept de file's owner.
  • kangourou38kangourou38 Membre
    22:32 modifié #4
    J'ai créé avec xcode une appli du type "cocoa based document". Xcode m'a généré deux ressources:
    -MainMenu.lib
    -MyDocument.lib. Ce dernier contient une instance de la fenêtre de mon document (V de view) et une instance d'un objet controleur (C). Les objets modèles sont alloués par programmation.
    Et voici mon problème : j'aimerais qu'un clic dans un item du menu agisse sur une méthode de mon controleur. Evidemment, ce serait bien plus simple si tous les objets se trouvaient dans le même .nib. Alors pourquoi xcode crée-t-il deux .nib dans ce cas ?
    Merci d'avance pour votre attentive écoute.
  • WIMPWIMP Membre
    22:32 modifié #5
    dans 1152025055:

    Alors pourquoi xcode crée-t-il deux .nib dans ce cas ?


    XCode crée deux .nib parce qu'ils sont lus séparément:
    MainMenu.nib est lu une seule fois au lancement de l'application, parce que son File's owner est NSApp, instance unique de NSApplication.
    En revanche, le File's owner de MyDocument.nib est de la classe MyDocument, sous-classe de NSDocument. Il sera donc lu à  chaque ouverture d'un nouveau document.
Connectez-vous ou Inscrivez-vous pour répondre.