2010-06-21 19 views
5

Quando si chiama un metodo, io usometodo di chiamata in Xcode

[self methodname]; 

Il problema che sto avendo è, in xCode Ottengo numerosi avvertimenti! Sta dicendo "*xxxappdelegate.app may not respond to methodname*".

C'è un modo migliore per chiamare i metodi?

+0

Non vorrei * sempre * usare 'sé'. –

risposta

5

Se si ottiene questo avvertimento, questo significa che sia:

  • Questo metodo non esiste nella classe
  • Se si chiama questo metodo su una classe diversa (non auto), allora si non abbiamo importato le intestazioni per
+0

Grazie, Darei di nuovo un'occhiata al mio file .h di nuovo :) – user370507

4

Queste avvertenze significano solo che il compilatore non sa se la classe in questione ha il metodo che si sta ca riempimento. Assicurati che il metodo che stai chiamando sia definito sopra la posizione nel file .m in cui lo stai utilizzando o dichiari il metodo nella parte superiore del file.

@implemention A 

-(void)blah 
{ 
    [self foo]; // warning! 
} 

-(void)foo 
{ 
    [self blah]; // no warning 
} 

@end 
+0

Grazie per quello, :) – user370507

+1

per evitare ciò, dichiarare il metodo nel file .h. – Nishant

0

Aggiungere methodname al @interface per la classe, xxxappdelegate nel tuo esempio. O semplicemente assicurati che l'implementazione methodname sia precedente al luogo in cui la chiami nel file.

+0

Grazie per il tuo aiuto :) – user370507

1

C'è qualcosa chiamato ordine di compilazione. Quando chiami il metodo foo non è ancora definito, tuttavia quando chiami il metodo blah è definito solo nella riga superiore.

molto più specifico:

cout << a; 
string a = "hello"; 

Quando fate che si otterrà un errore variabile non definita "a". Che cosa si dovrebbe fare è:

string a = "hello"; 
cout << a; 
0

Se il file .h ha dichiarato il metodo non ci può essere qualche problema relativo al xcodes incapacità di indice per risolvere questo andare alle preferenze ed eliminare archivi e altri dati memorizzati.