2009-04-06 13 views
6

Pracuję przez Stanford iPhone class i nie mogę zrozumieć, dlaczego otrzymuję ostrzeżenie kompilatora. Zakładam, że muszę rzucić mój obiekt na NSString, ale pojawia się błąd, gdy próbuję to zrobić. Kod działa i daje mi oczekiwany wynik, ale ostrzeżenie jest dla mnie kłopotliwe.Przesyłanie obiektu NSObject do NSString

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

ten biegnie z ostrzeżeniem: 'NSObject' może nie reagować na '-lowerCaseString'

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

to zgłasza błąd: Konwersja do non-skalarnego typu wnioskowało

Odpowiedz

21

Wierzę, że ta zrobi to, czego potrzebujesz:

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

Uwaga Właśnie dodałem znak * do drugiej linii kodu zrobić wskaźnik do NSString. Mam nadzieję, że to pomoże!

Adam

+0

Dzięki Adam, mam wszystkie moje książki i dokumenty otwarte, ale nie mogłem znaleźć odpowiedzi pojedynczego znaku w dowolnym miejscu. Twoje zdrowie. –

3

Dlaczego obiekt zadeklarowane jako NSObject jeśli to ma być NSString? Jeśli zamierzasz nazywać metody NSString, zadeklaruj to jako NSString lub pozostaw jako id. Wtedy nie dostaniesz błędów.

+0

Jest to NSMutableArray obiektów losowych, które należy przeanalizować. Dane wyjściowe występują, gdy napotka obiekty NSString. Działał bez błędów, ale ja też lubię eliminować ostrzeżenia. –

+0

Posiadanie zmiennej typu ID zamiast NSObject * byłoby lepsze. Po to jest id - kiedy nie znasz typu obiektu. Zajrzyj na http://stackoverflow.com/questions/466777, jeśli chcesz uzyskać więcej informacji. – Chuck

+0

+1 za promowanie używania identyfikatora przez NSObject * – Abizern