2011-11-27 14 views
5

Voglio sapere se la superclasse implementa il metodo A dalla mia sottoclasse, che implementa anche il metodo A, così posso tranquillamente chiamare [super A] dalla mia sottoclasse senza ottenere un'eccezione.Come posso sapere se la superclasse implementa anche lo stesso metodo implementato dalla mia sottoclasse?

Risponde a NSObjectToSelector: non funziona in questo caso, poiché restituirà sempre true (poiché la sottoclasse implementa il metodo in questione). Qualche idea?

risposta

12

Per eseguire questa operazione è possibile utilizzare il metodo classe instancesRespondToSelector:. Quindi dalla sottoclasse è possibile chiamare [[self superclass] instancesRespondToSelector:@selector(...)] per determinare se la superclasse implementa il metodo richiesto.

+0

Ciò che è equivalente per metodi di classe? diciamo, voglio testare se un selettore di livello è in super classe o in sottoclasse? – jAckOdE

0

Prova [[[auto di classe] superclasse] instancesRespondToSelector: (.) ​​@selector]]]

[super respondsToSelector:] invoca implementazione della superclasse di respondsToSelector, che è probabile che la stessa come l'attuale classe di. Lo standard non controlla se la superclasse implementa il metodo.

2

Chiamare [[self superclass] instancesRespondToSelector:@selector(...)] non funziona, se la classe che lo implementa è sottoclasse e il metodo viene chiamato sull'istanza della classe sottoclasse. Una soluzione è quella di digitare in modo esplicito il nome della classe corrente che lo implementa:

[[ExplicitClassName superclass] instancesRespondToSelector:@selector(...)] 
Problemi correlati