2009-10-04 6 views
1

J'essaie actuellement de compiler OCMock avec GCC4.2 (original: 4,0) et commencer à obtenir l'avertissement suivant:Attention: passage d 'arguments de type objectif distinct-C

avertissement: Argument 1 passant de ' partialMockForObject: » de distinct de type Objective-C

la méthode appelante est la suivante:

- (void)forwardInvocationForRealObject:(NSInvocation *)anInvocation 
{ 
    // in here "self" is a reference to the real object, not the mock 
    OCPartialMockObject *mock = [OCPartialMockObject partialMockForObject:(id)self]; 
    // ... 
} 

et e La méthode appelée est la suivante:

+ (id)partialMockForObject:(NSObject *)anObject; 

en préfixant l'argument avec un cast en id corrige le problème. Je pensais que tous les objets étaient sous-classe de NSObject et que la distribution serait implicite (super classe de substitution: une super classe peut toujours être remplacée par une classe enfant)

Répondre

2

Tous les objets ne sont pas nécessairement des descendants de NSObject. La plupart des classes de Cocoa sont (NSProxy est la seule exception qui se produit au-dessus de ma tête), mais si vous ne déclarez pas une classe comme descendant de NSObject, ce ne sera pas le cas. Serait-ce que vous avez oublié cela dans la déclaration de l'endroit où cela se produit?

+0

c'est vraiment une classe de dérivation NSProxy. Est-ce qu'un casting à (id) fonctionnera? Merci beaucoup, je vais le marquer comme la bonne réponse. –

+0

@Johannes: Presque certainement. Je sais que dans d'autres versions de ce framework, la signature de la méthode avait un type d'argument id, et NSProxy répondrait à tout ce que fait l'objet à l'autre extrémité. – Chuck