2009-06-25 7 views
4

Lorsque j'envoie un objet à NSLog, j'obtiens une chaîne avec trois attributs. La première est la classe de l'objet, la seconde est le cadre de l'objet, et la troisième est le CALayer de l'objet. Les deuxième et troisième attributs sont intitulés (par exemple, layer =), de sorte que je peux les appeler par le titre (par exemple myObject.layer).Test pour le type de classe

Le premier ne l'est pas. Comment puis-je tester le type de classe?

Merci!

Répondre

10

Pour obtenir la classe d'un objet, appelez simplement [myObject class]. Vous pouvez comparer à une classe souhaitée comme suit:

if ([myObject class] == [SomeClass class]) { /* ... */ } 
if ([myObject class] == [NSString class]) { /* ... */ } 

Si vous recherchez simplement le nom de classe comme une chaîne, vous pouvez utiliser la fonction NSStringFromClass comme suit:

NSString * className = NSStringFromClass([myObject class]); 
+0

Merci beaucoup. C'est exactement ce dont j'avais besoin. –

+0

Vous êtes les bienvenus :) –

7

Si vous aussi souhaitez inclure les sous-classes d'utilisation de la classe ciblée:

[object isKindOfClass:[SomeClass class]] 
+0

Merci. Vous êtes géniaux les gars! –

+0

@Diederik Hoogenboom: Bon point. J'ai oublié celui là! –

3

@eJames et @Diederik sont corrects. Cependant, il existe quelques autres options, dont certaines peuvent être préférables selon votre goût. Par exemple, au lieu de tester l'égalité des objets de classe, vous pouvez également utiliser -isMemberOfClass: qui exclut les sous-classes, tandis que -isKindOfClass: et -isSubclassOfClass: ne le font pas. (Ceci est certainement un cas où une option peut être plus intuitive pour certaines personnes que pour d'autres.)

En outre, [SomeClass className] ou [anObject className] sont pratiques, des moyens plus courts pour obtenir le nom de la classe comme NSString. (Je sais -className est défini sur NSObject, et +className fonctionne pour les prototypes de classe, bien que je ne peux pas trouver la documentation pour cela facilement.)

Questions connexes