2009-04-06 14 views
6

Sto lavorando attraverso il Stanford iPhone class e non riesco a capire perché sto ricevendo un avviso del compilatore. Presumo che ho bisogno di lanciare il mio oggetto su NSString, ma ottengo un errore quando provo a farlo. Il codice viene eseguito e mi dà l'output previsto, ma l'avvertimento mi infastidisce.Trasmissione di un NSObject a NSString

NSLog(@"lowerCaseString is: %@", [object lowercaseString]); 

Questo corre con l'avvertenza: 'NSObject' non può rispondere a '-lowerCaseString'

NSLog(@"lowerCaseString is: %@", [(NSString)object lowercaseString]); 

Questo genera un errore: la conversione di tipo non-scalare richiesto

risposta

21

Credo che questo farà quello che vi serve:

NSLog(@"lowerCaseString is: %@", [(NSString *)object lowercaseString]); 

Nota ho appena aggiunto un * alla seconda riga di codice per crea un puntatore a NSString. Spero che sia d'aiuto!

Adam

+0

Grazie Adam, ho aperto tutti i miei libri e documenti, ma non ho trovato nessuna risposta a questo personaggio. Saluti. –

3

Perché è oggetto dichiarato come NSObject se si suppone essere un NSString? Se intendi richiamare i metodi NSString, dichiaralo come NSString o lascialo come un id. Quindi non avrai errori.

+0

Si tratta di un NSMutableArray di oggetti casuali che devono essere analizzati. L'output si verifica quando incontra oggetti NSString. Funzionava senza errori, ma mi piace eliminare anche gli avvertimenti. –

+0

Avere la variabile typed id piuttosto che NSObject * sarebbe meglio. Ecco a cosa serve l'ID: quando non conosci il tipo di oggetto. Dai un'occhiata a http://stackoverflow.com/questions/466777 se vuoi maggiori informazioni. – Chuck

+0

+1 per promuovere l'uso dell'ID su NSObject * – Abizern