2010-06-02 5 views
5

J'ai installé et connecté avec succès via xAuth en utilisant une classe étendue de MGTwitterEngine, ma question est de savoir si je veux passer à un autre contrôleur de vue, comment puis-je changer la classe de délégué, comme il est sorte de référence faibleModifier le délégué de MGTwitterEngine

@interface MGTwitterEngine : NSObject <MGTwitterParserDelegate> { 
__weak NSObject <MGTwitterEngineDelegate> *_delegate; 

Suis-je mieux envelopper cette place dans une classe singleton et passer autour de cette façon, semble exagéré de se connecter à chaque fois, ou ai-je manqué un moyen laborieusement évident de partager cet objet autour

En ce moment j'ai ajouté une méthode setDelegate au MGTwitterEngine mais j'ai l'impression de combattre le framework nnécessairement

+0

J'aimerais aussi connaître la réponse à celle-ci. J'aurais aimé que vous puissiez spécifier le délégué à chaque demande. – Camsoft

Répondre

6

Si vous partagez le moteur sur plusieurs objets, vous voudriez que d'autres objets/singleton enveloppent le moteur et agissent comme son seul délégué. Si vous avez fait de la programmation de base de données, alors pensez-y comme une connexion à une base de données - vous ne voudriez probablement pas que chaque contrôleur de vue crée sa propre connexion à la base de données. Au lieu de cela, vous créez un objet de gestionnaire de données qui est partagé par les vues et éventuellement extrait certains des composants internes de la base de données.

Si différents contrôleurs de vue gèrent différentes tâches, comme la connexion, la recherche d'utilisateurs, l'interrogation de messages, etc., les méthodes déléguées de votre wrapper doivent pouvoir transmettre les réponses au contrôleur de vue approprié.

Si vous avez différents contrôleurs de vue appelant les mêmes méthodes (et si oui, pourquoi?), Vous pouvez toujours rediriger les réponses vers les contrôleurs de vue correspondants. Comme le disent les docteurs MGTwitterEngine, "Chaque méthode de l'API Twitter renvoie un NSString qui est un identifiant unique pour cette connexion." Vous auriez juste besoin de passer un objet (votre contrôleur de vue) ou un bloc comme paramètre supplémentaire à chacune de vos méthodes enveloppées. Vous pouvez mettre en cache la chaîne d'identifiant Twitter et cet objet/bloc dans un dictionnaire modifiable lorsque votre wrapper envoie la réponse, puis rechercher l'ID de connexion dans le cache lorsqu'il est temps de gérer la réponse. Utilisez NSNotifications dans le délégué

+1

Je commençais à réfléchir ces lignes. Il est tout à fait logique d'avoir un seul délégué pour le MGTwitterEngine et d'obtenir cela pour ramener les résultats au bon contrôleur de vue/vue. Merci beaucoup! – Camsoft

+0

Je suis arrivé à la même conclusion lorsque je travaillais sur un petit projet l'année dernière. J'ai fini par implémenter une méthode 'subscribe: (id) target toResultsOf: (NSString) connectionId' qui utilisait un NSMutableDictionary pour stocker les abonnements. Une fois que le délégué reçoit les résultats, il recherche la cible, transmet les données à une méthode avec la même signature dans le contrôleur et supprime l'abonnement. – freeatnet

2

en fait, vous pouvez. Le délégué, n'est rien mais une variable dans le MGTwitterEngine. Ajoutez simplement une instance dans le contrôleur de vue suivant en ajoutant l'en-tête et les appels d'implémentation appropriés. après instatiating le nouveau contrôleur de vue jeu:

nextViewController._mgTwitterEngine = self.mgTwitterEngine; 
nextViewController.mgTwitterEngine.delegate=nextViewController; 

puis appelez la nextViewController. Ne pas oublier de mettre le délégué au contrôleur de vue original lorsque vous y revenez (soit sur viewDidAppear ou viewWillAppear)

Hope that helps ... Bonne chance!

+0

Je me demandais simplement comment cela fonctionnerait si l'application faisait quelques requêtes asynchrones sur Twitter en même temps à partir de différents contrôleurs utilisant le même objet moteur de Twitter. Essentiellement, je peux voir que toutes les demandes reviennent au délégué qui a été enregistré pour la dernière fois. Devrait vraiment être envoyé avec la demande? – Camsoft

+0

La réponse reviendrait au dernier délégué enregistré ...soit vous devez traiter cela dans chaque classe qui va utiliser le mgTwitterEngine, ou vous pouvez utiliser la méthode singleton, même essayez d'utiliser un singleton qui ne traite que les réponses via le centre de notification ... – Marsson

0

Configurez le contrôleur de vue à l'endroit où vous souhaitez ajouter un observateur. Avoir la méthode de délégué pour MGTwitterEngine poster la notification.