/ / Type id <Protocol1> n'est pas conforme à id <Protocol2> - mais c'est le cas! - objectif-c, délégués, protocoles

L'identifiant de type <Protocol1> n'est pas conforme à l'ID <Protocol2> - mais c'est le cas! - objectif-c, délégués, protocoles

D'accord, j'ai deux protocoles dans le même en-têtefichier, appelons-les Protocol1 et Protocol2. Je dispose d’un contrôleur principal d’application conforme aux deux protocoles et d’une sous-classe NSWindowController qui comprend le membre suivant:

id <Protocol1, Protocol2> delegate;

Je reçois un avertissement à la fin de monImplémentation de la sous-classe NSWindowController indiquant que "type id n'est pas conforme à Protocol2". Mais, comme indiqué, le délégué doit se conformer aux deux protocoles, ce qui est le cas.

De plus, l'application fonctionne parfaitement. Y a-t-il un autre moyen de faire cela? Je suppose que je pourrais simplement combiner les deux protocoles, mais cela nuirait à la modularité du programme.

MODIFIER:

Voici les deux protocoles. Comme il s’agit plus d’un scénario test, ils sont courts.

@protocol TPTBController <NSObject>

-(void)sendGrowlMessage:(NSString *)message title:(NSString *)title;

@end

@protocol AddPower <NSObject>

-(void)addPower:(NSArray *)array;
-(void)setCanAddPower:(BOOL)can;

@end

Réponses:

3 pour la réponse № 1

La spécification de langage n’indique pas si id-with-protocoles supporte réellement une liste de protocoles ou non. Les protocoles peuvent étendre les listes de protocoles, mais il n’est pas clair si cette syntaxe le prend en charge ou non.

Vous pouvez créer un protocole combiné:

@protocol AddPowerAndTPTBController <AddPower, TPTBController>
@end
...
id <AddPowerAndTPTBController> delegate;

Bien que pas élégant, cela fonctionnerait; Toutefois, votre classe déléguée doit également se conformer à AddPoewrAndTPTBController, et pas seulement aux deux individuellement.


0 pour la réponse № 2

Importez-vous les protocoles sur votre NSWindowController sous-classe?

Que l'application fonctionne me pointe dans cettedirection. Il semble que lors de la vérification statique, le compilateur ne puisse pas "déterminer que votre classe est conforme aux protocoles, alors qu’en cas de distribution de messages, elle réussit (et c’est pourquoi l’application fonctionne comme prévu)


0 pour la réponse № 3

Que se passe-t-il si vous divisez les protocoles en fichiers séparés, puis les importez tous les deux dans votre NSWindowController classe?