2009-11-30 3 views
0

J'ai un problème avec les classes. Ceci est mon code:Problème de classe d'objectif C

self.shapeClass = [HWRectangle class]; 
if ([_shapeClass isKindOfClass:[HWRectangle class]]) { 
    NSLog(@"Class created as: %s", [_shapeClass description]); 
} 

Je pensais que le programme fera l'exploitation forestière dans ce cas, mais il ne fonctionne pas. Avez-vous une idée pourquoi pas?

+0

Ne démarrez pas vos noms ivar avec un seul trait de soulignement. C'est une convention de codage interne d'Apple, et cela vous expose à un risque de collision de noms. – NSResponder

+0

@NSResponder Cela s'applique uniquement aux noms de méthodes, pas aux variables d'instance ... – bbum

Répondre

3

parce que: if ([_shapeClass isKindOfClass:[HWRectangle class]])

_shapeClass devrait être un exemple de la classe que vous testez, à moins que vous êtes vraiment tester des comparaisons de classe. Donc, cette méthode est une comparaison d'instance à une classe, pas une comparaison de classe à classe.

Pour les points de bonus, votre chaîne de format doit être: NSLog(@"Class created as: %@", [_shapeClass description])

(sauf si vous avez remplacé la méthode NSObject (que vous ne devriez pas faire))

+0

À savoir, la méthode recherchée par le demandeur est 'isSubclassOfClass:' plutôt que 'isKindOfClass:'. – Chuck

0

isKindOfClass vérifie la classe d'une variable. Vous dites que shapeCalls = [HWRectangle class]. Le résultat de [HWRectangle class] est de la classe "Class". Donc, si vous comparez cela avec la classe de HWRectangle, vous constaterez que les deux ne sont pas les mêmes.

Questions connexes