Question

J'ai deux contrôles dans mon fichier Interface Builder et chacun de ces contrôles pour lesquels j'ai créé une classe déléguée distincte dans le code (Control1Delegate et Control2Delegate). J'ai créé deux "Objets". dans le constructeur d’interface, faites-les de ce type et connectez-leur les commandes en tant que délégués. Les délégués travaillent très bien. Mon problème est que je dois partager les informations d'un délégué à l'autre et je ne sais pas comment.

Quelle est la meilleure façon de faire cela? Combinez les deux délégués dans une classe ou accédez d'une manière ou d'une autre à une troisième classe qu'ils peuvent lire tous les deux? Étant donné que je n'initialise réellement la classe nulle part dans mon code, je ne sais pas comment obtenir une référence à son instance réelle (s'il en existe une), ni même accéder à la commande "main". classe que le projet est venu avec.

Était-ce utile?

La solution

Vous pouvez ajouter des points de vente d'un délégué à l'autre. Il existe deux manières d'ajouter une prise à un objet dans IB (en supposant que vous utilisez Xcode / IB version 3.0 ou ultérieure:

  1. Si vous n'avez pas encore généré le code pour vos classes de délégués, sélectionnez le délégué souhaité, puis ouvrez le " Object Identity " onglet dans l'inspecteur de l'IB. Ajouter un " Class outlet " de type NSObject. Vous devriez alors pouvoir définir ce nouveau point de vente sur l'autre délégué. Bien entendu, vous devrez générer le code de votre classe de délégué et ajouter les fichiers source générés à votre projet Xcode avant de pouvoir charger le nib.

  2. Si vous avez déjà généré le code de la classe déléguée (ou ajouté un NSObject à votre NIB et défini sa classe sur une classe existante de votre projet Xcode), ajoutez une variable d'instance à la classe déléguée:

    IBOutlet ID outletToOtherDelegate;

    Tant que votre projet Xcode est ouvert (comme indiqué par la bulle verte en bas à gauche de la fenêtre de votre carte NIB), IB détectera automatiquement le nouveau point de vente et vous permettra de l'affecter à l'autre objet délégué de votre NIB. .

Cocoa connecte automatiquement ces prises au moment du chargement de la carte NIB. Une fois que awakeFromNib est appelé sur des instances de vos objets de délégation, vous pouvez supposer que tous les autres objets de la carte NIB ont été instanciés et que tous les points de vente ont été connectés. Vous ne devez cependant pas supposer d’ordre dans les appels à awakeFromNib .

Autres conseils

Je pense que vous pouvez créer des points de vente sur chacun d’entre eux et les lier de manière à ce qu’ils aient tous les mêmes données en permanence. S'il y a un objet modèle à partager, c'est plutôt bien rangé. Je ne sais pas vraiment comment faire cela; Je pense que je l'ai vu dans un tutoriel iPhone une fois!

Je n'ai pas mon Mac devant moi depuis que je suis au travail, mais serait-il possible de lier une instance d'un délégué à un membre de l'autre délégué? Cela ressemblerait à lier un NSArrayController à un membre d’une autre classe de contrôleur, par exemple.

Cependant, en fonction de ce que font les classes déléguées, si les tâches sont similaires, je les combinerais probablement en une seule fois. Cela éliminerait complètement le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top