2010-10-17 4 views
2

Si j'ai un protocole (disons UIPickerViewDataSource) et que j'implémente ses méthodes requises, ai-je besoin de déclarer ces méthodes dans le fichier d'en-tête de ma classe? En ce moment, je ne le fais pas et je reçois un avertissement de mise en œuvre incomplète (bien que tout fonctionne bien). Si j'ajoute les méthodes requises dans le, je ne reçois pas un tel avertissement:implémenter des méthodes de protocole dans objectif-c

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component; 

Est-ce le comportement correct? Est-il vraiment nécessaire d'ajouter la déclaration pour les méthodes de protocole requises dans le fichier d'en-tête de ma classe?

Répondre

4

Non, vous ne le faites pas. Déclarer que la classe implémente ce protocole et implémenter les méthodes est suffisant. Vous pouvez toujours les déclarer dans l'en-tête à des fins de documentation, cependant.

+0

+ 1 Si vous spécifiez le protocole d'implémentation dans l'en-tête, je ne les déclarerais pas - pareil avec les méthodes surchargées. J'aime bien le regroupement avec pragmas dans le fichier d'implémentation comme le suggère Apple. – Eiko

+1

En dehors de l'inutilité de spécifier explicitement les méthodes de protocole dans l'en-tête, je pourrais ajouter que la plupart du temps je trouve ces méthodes protocolaires dans un en-tête de classe inutilement le fichier d'entête et distrait des méthodes qui rendent la classe . – DarkDust

+0

En effet. C'est la spécification ouverte de quelles méthodes votre classe «exporte». Et les méthodes déléguées ne sont probablement pas ce que vous voulez que d'autres personnes/objets appellent directement. – Eiko

3

La méthode correcte consiste à déclarer que votre classe implémente le protocole. Si, par exemple, votre classe est appelée LordSandwichViewController, votre interface de classe doit ressembler à ceci:

@interface LordSandwichViewController : UIViewController <UIPickerViewDataSource> { 
{ 
} 

Alors vous ne déclarez pas les méthodes de protocole dans l'interface de classe, seul le protocole.

+0

Pour être exact, vous utilisez la partie délimitée par le crochet d'angle de la déclaration d'interface pour déclarer que votre classe * est conforme aux * protocoles listés. Une déclaration de protocole commence par la directive '@ protocol'. –

0

avertissements de mise en œuvre incomplète vous dire que vous n'êtes pas implémentez toutes les méthodes nécessaires, vous êtes soit:

  1. Définition dans votre tête.
  2. Déclaration d'une méthode requise par un protocole auquel vous vous conformez.

Examinez les méthodes attendues et mettez-les en œuvre.

Questions connexes