file's owner et liens entre plusieurs .nib
kangourou38
Membre
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.
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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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...
.
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 : 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.
-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.
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.