2010-02-16 4 views
2

J'ai un protocole direComment créer des objets de protocole tels que je peux appeler les méthodes de celui-ci en Objective-C?

@protocol MyProtocol 
-(void)mload 
@end 

avec une méthode mload, j'ai aussi ClassA qui a mis en œuvre cette méthode de protocole c.-à-Mcharge. Maintenant, j'ai besoin d'appeler cette méthode dans une autre classe, disons ClassB en utilisant une instance de ClassA. Comment faire ça?

+0

Qu'est-ce, exactement, est 'obj'? Une instance de 'ClassA'? Un objet de protocole ('@protocol (MyProtocol)')? Si ce dernier, comment décidez-vous quelle méthode invoquer, étant donné qu'un protocole peut déclarer plus d'une méthode? – outis

+0

obj est un objet de protocole id obj; Maintenant, je dois appeler la méthode mload dans ClassB .. – Cathy

+0

Un "objet de protocole" est une instance de classe Protocole; ce n'est pas la même chose que l'instance d'une classe qui implémente un protocole. 'id obj' est beaucoup plus clair. – outis

Répondre

4

En ClassB quelque chose comme ça, ne savez pas comment vous obtenez référence à ClassA obj mais:

// obj is of type that implements protocol 
id<MyProtocol> obj = [[ClassA alloc] init]; 
[obj load]; 


// should work as well because objective-c is dynamically typed so you can call 
// any method on an object 
id obj = [[ClassA alloc] init]; 
[obj load]; 
+0

Merci pour la réponse que j'ai maintenant essayé, cela me donne une exception en tant que NSInvalidArgumentException et [ClassB mload]: sélecteur non reconnu envoyé à l'instance. Comment résoudre le problème? – Cathy

+0

Avez-vous implémenté 'mload' dans' ClassB'? – mipadi

+0

Salut stefanB maintenant je suis avec la sortie .. Merci .. – Cathy

Questions connexes