2009-09-25 25 views
12

Ho una chiamata in questo modo [Metodo di classe] e un avviso che dice che la classe non può rispondere al messaggio "metodo".Come disattivare l'avviso in xcode su una linea specifica?

Il messaggio "metodo" non effettivamente esiste, ma il mio uso codice sconosciuto messaggio cattura (usando forwardingTargetForSelector) quindi in grado di funzionare ed è costruito per funzionare in questo modo. Come posso nascondere questo fastidioso avviso?

risposta

16

Se avete intenzione di inviare un messaggio possibilmente-non implementato a un oggetto, e si sa che si sta andando a prendere i guasti, è necessario utilizzare l'invocazione:

id myClone = [anObject performSelector:@selector(copy)]; 

che dichiara il tuo intento più direttamente che tu stia chiamando un metodo che potrebbe non esistere, e tu sei bello con quello. Questo è un modo più chiaro per farlo che sopprimere l'avviso o simulare il metodo.

+0

Grazie. Immagino che sarebbe meno efficiente se dovessi creare un selettore ad ogni chiamata. A meno che non dichiari tutto il mio @selector uno per tutti. – CodeFlakes

+1

La differenza di prestazioni sarà praticamente inosservabile. Se sei preoccupato, profilalo. Non ottimizzare preventivamente. –

+2

'performSelector' funziona solo con metodi i cui tipi di argomenti e tipo di ritorno sono tutti oggetti; e chi ha solo 0, 1 o 2 argomenti – user102008

3

È possibile definire una categoria che dichiari tale metodo. Avere la definizione in ambito al momento della compilazione eviterebbe l'avvertimento. Qualcosa di simile

@interface MyClass (ShutUpTheCompilerMethods) 
- (void)method; 
@end 

... 

[MyClass method] //no warning here 
Problemi correlati