2010-09-24 4 views
0

débutant ici. Ceci est un projet utilitaire iPhone.Comment appeler une méthode basée sur un protocole?

Les premières choses d'abord. J'ai un protocole qui est le suivant:

@protocol FlipsideViewControllerDelegate 
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller; 
- (void)updateLabels:(NSString *)text :(BOOL)isOn; 
@end 

je mets en œuvre ce protocole dans mon MainViewController en faisant ceci:

- (void)updateLabels:(NSString *)text :(BOOL)isOn { 
    [nameLabel setText:text]; 
    if (isOn) 
     [onLabel setText:(@"ON")]; 
    else 
     [onLabel setText:(@"OFF")]; 
    } 

Maintenant, je suis désireux d'utiliser la méthode updateLabels dans mon FlipsideViewController dans une méthode appelée . Comment est-ce que je ferais référence à la méthode updateLabels située dans MainViewController?

+0

EDIT: Merci pour les réponses. Ce que j'essaie de faire est d'utiliser une variable à la place du '@" foo "'. Indépendamment de ce que je mets, le compilateur dit que 'FlipsideViewController ne peut pas répondre à '-updadeLabels'. Je suis coincé. :) –

Répondre

0

Basé sur votre EDIT ci-dessus, je pense que vous pourriez être confus au sujet des protocoles de délégués. La délégation est l'endroit où vous avez un deuxième objet, le délégué, qui adopte le protocole délégué. Ensuite, l'objet FlipsideViewController appelle les méthodes (qui font partie de ce protocole) sur l'objet délégué. Cela signifie que FlipsideViewController ne doit pas implémenter le protocole FlipsideViewControllerDelegate et que vous ne devez donc pas appeler les méthodes de ce protocole.

Voici quelques informations sur la délégation: http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html%23//apple_ref/doc/uid/TP40008195-CH14-SW1

Et un peu plus sur les protocoles: http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Protocol.html%23//apple_ref/doc/uid/TP40008195-CH45-SW1

+0

Merci pour l'info, je vais leur donner une bonne lecture. –

+0

Edit: Pour ceux qui trouvent cette question à nouveau, j'ai trouvé un moyen de le faire. Vous avez juste besoin de faire 'self.delegate updateLabels: @" foo "" YES]; ' –

2

[self updateLabels:@"foo" :YES];

Soit dit en passant, alors qu'il est possible de faire un paramètre sans nom à une méthode (comme vous), il est généralement considéré comme une mauvaise pratique sans une très bonne raison autrement. :)

+0

Nous vous remercions de votre info. –

+0

+1 pour le rappel de style. –

Questions connexes