2010-06-17 14 views
13

Diciamo che nella versione 1.0 dell'API Apple esiste una classe NSFoo con una proprietà 'color'. L'API 1.1 aggiunge la proprietà 'size'.come si può sapere se un NSObject ha una certa proprietà?

Voglio sapere se posso usare il getter: myFoo.size

[myFoo respondsToSelector: @selector (getSize)] non funziona come previsto.

Qual è il modo corretto per scoprire se un oggetto ha una proprietà? Grazie!

risposta

36

Sei vicino. Il vostro selettore dovrebbe essere esattamente il messaggio che si desidera inviare l'oggetto:

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

dovrebbe funzionare.

+5

Va notato che ciò è dovuto al fatto che i getter predefiniti per le proprietà omettono il prefisso 'get'. A differenza dei setter che hanno il prefisso 'set'. – Senseful

+0

Haha, oops. Grazie! – strawtarget

+0

Come posso fare il contrario? Se voglio impostare la dimensione su Foo? myFoo non conosce le proprietà della classe, quindi non posso accedere alle dimensioni. –