2010-06-17 29 views
13

Supposons que dans Apple API version 1.0, il existe une classe NSFoo avec une propriété 'couleur'. API 1.1 ajoute la propriété 'taille'.comment pouvez-vous savoir si un NSObject a une certaine propriété?

Je veux savoir si je peux utiliser le getter: myFoo.size

[myFoo respondsToSelector @selector (getSize)] ne fonctionne pas comme prévu.

Quelle est la bonne façon de savoir si un objet a une propriété? Merci!

Répondre

36

Vous êtes proche. Votre sélecteur doit être exactement le message que vous souhaitez envoyer à l'objet:

if ([myFoo respondsToSelector:@selector(size)]) { 
    int size = [myFoo size]; // or myFoo.size in dot-notation. 
    // ... 
} 

devrait fonctionner.

+5

Il convient de noter que cela est dû au fait que les accesseurs par défaut des propriétés omettent le préfixe 'get'. Contrairement aux setters qui ont le préfixe 'set'. – Senseful

+0

Haha, oups. Merci! – strawtarget

+0

Comment puis-je faire l'inverse? Si je veux définir la taille sur Foo? myFoo ne connaît pas les propriétés de la classe, donc je ne peux pas accéder à la taille. –