2009-04-06 16 views
6

Ich arbeite durch die Stanford iPhone class und ich kann nicht herausfinden, warum ich eine Compiler-Warnung bekomme. Ich nehme an, dass ich mein Objekt in NSString umwandeln muss, aber ich bekomme einen Fehler, wenn ich das versuche. Der Code läuft und gibt mir die erwartete Ausgabe, aber die Warnung stört mich.Casting eines NSObject zu NSString

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

Dieser läuft mit der Warnung: 'NSObject' kann '-lowerCaseString' nicht reagiert

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

dies einen Fehler führt: Umwandlung in nicht-skalare Typen Verlangen

Antwort

21

ich glaube tun, was Sie brauchen:

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

Hinweis habe ich nur noch ein * zu Ihrer zweiten Zeile Code Machen Sie einen Zeiger auf NSString. Ich hoffe es hilft!

Adam

+0

Danke Adam, ich habe alle meine Bücher und Dokumente offen, konnte aber diese Antwort mit einem Zeichen nirgends finden. Prost. –

3

Warum Objekt als NSObject deklariert wird, wenn es angenommen hat, ein NSString sein? Wenn Sie beabsichtigen, NSString-Methoden darauf aufzurufen, deklarieren Sie sie als NSString oder lassen Sie sie als ID bestehen. Dann werden Sie keine Fehler bekommen.

+0

Es ist ein NSMutableArray von zufälligen Objekten, die analysiert werden müssen. Die Ausgabe erfolgt, wenn NSString-Objekte gefunden werden. Es lief ohne Fehler, aber ich möchte die Warnungen auch beseitigen. –

+0

Die Variable typisierte ID anstelle von NSObject * wäre besser. Genau dafür ist id - wenn Sie den Typ des Objekts nicht kennen. Sehen Sie sich http://stackoverflow.com/questions/466777 an, wenn Sie weitere Informationen wünschen. – Chuck

+0

+1 für die Förderung der Verwendung von ID über NSObject * – Abizern