2010-01-22 3 views
3

Ma question est simple en fait, comment créer un objet pour agir en tant que délégué, au lieu d'inclure les méthodes de délégué à mon avis? Par exemple, j'ai une fonctionnalité x qui nécessite des méthodes déléguées, et elles sont actuellement configurées pour utiliser self comme délégué. J'aimerais mettre ces méthodes dans leur propre objet afin que les méthodes déléguées puissent être appelées et faire des choses si la vue est terminée.Création d'un objet pour agir en tant que délégué - Objectif C

Quelle est la meilleure façon?

Répondre

2

par exemple, les méthodes de délégués NSXMLParser - ils existent, le délégué est défini, mais je ne veux pas les appeler comme moi dans mon contrôleur de vue ... quelle autre option ai-je?

Vous pouvez spécifier une autre classe personnalisée pour gérer les méthodes de délégation, si vous le souhaitez. Il suffit de créer une classe, appelez-le MyXMLParserDelegate ou quelque chose de similaire. Ensuite, tout ce que vous avez à faire est de dire à votre objet NSXMLParser qu'il devrait utiliser une instance de votre classe en tant que délégué.

Si vous utilisez Interface Builder, ajoutez un nouvel objet dans le fichier XIB, définissez sa classe à MyXMLParserDelegate, puis faites glisser une connexion à partir de votre sélection de l'objet NSXMLParserdelegate au nouvel objet.

Si vous le faites par programmation, le fonctionnement de base ressemble à ceci:

MyXMLParserDelegate * myDelegate = [[MyXMLParserDelegate alloc] init]; 
[someXMLParser setDelegate:myDelegate]; 

Gardez à l'esprit, cependant, que les délégués ne sont pas conservés, ainsi afin de le faire sans fuite de mémoire, vous devez ajouter un Ivar de type MyXMLParserDelegate à votre classe viewController, puis procédez comme suit:

// in your @interface block: 
{ 
    ... 
    MyXMLParserDelegate * myDelegate; 
} 

// in your init method: 
myDelegate = [[MyXMLParserDelegate alloc] init]; 

// in your awakeFromNib method (or anywhere else it seems appropriate): 
[someXMLParser setDelegate:myDelegate]; 

// in your dealloc method: 
[myDelegate release]; 
+0

Salut Merci - cela fonctionne, et c'est ce que je fais, donc c'est bien. – mootymoots

1

Découvrez cette réponse, je pense qu'il couvre ce que vous avez besoin: How to use custom delegates in Objective-C

+0

isnt qui explique comment créer un délégué? Les méthodes de délégué, etc. sont déjà créées dans le cadre de l'objet de classe personnalisé que je crée. Je ne veux tout simplement pas mettre les méthodes de délégué requises dans mon contrôleur de vue. – mootymoots

+0

par exemple, les méthodes de délégué NSXMLParser - elles existent, le délégué est défini, mais je ne veux pas les appeler comme moi dans mon contrôleur de vue ... quelle autre option ai-je? – mootymoots