2010-11-15 13 views
5

Dobra, mam z tym problem. Szukałem na niej ostatniej godziny i nie rozumiem, co robię źle. Próbuję pobrać aktualnyTytuł nadawcy, a następnie przekonwertować go na liczbę całkowitą, dzięki czemu mogę go użyć w wywołaniu listy.inicjalizacja sprawia, że ​​wskaźnik z liczby całkowitej bez rzutowania

NSString *str = [sender currentTitle]; 
NSInteger *nt = [str integerValue]; // this is where the error appears // 
NSString *nextScreen = [NSString stringWithFormat:@"Screen_%@.jpg", [screenList objectAtIndex:nt]]; 

Przypuszczam, że to coś z [str integerValue] bit nie jest prawidłowo stosowany, ale nie mogę znaleźć przykład, który działa.

Dzięki!

Odpowiedz

16

Przeanalizujmy komunikat o błędzie:

Inicjowanie (NSInteger nt) sprawia, że ​​wskaźnik (*) z Integer ([str integerValue]) bez obsady.

To znaczy, że próbujesz przypisać zmiennej typu non-pointer ([str integerValue], która zwraca NSInteger) do zmiennej z typu wskaźnika. (NSInteger *).

Pozbyć się * po NSInteger i powinno być w porządku:

NSString *str = [sender currentTitle]; 
NSInteger nt = [str integerValue]; // this is where the error appears // 
NSString *nextScreen = [NSString stringWithFormat:@"Screen_%@.jpg", [screenList objectAtIndex:nt]]; 

NSInteger jest opakowaniem typu dla integralnego typu danych maszynowo zależny, który jest zdefiniowany tak:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
typedef long NSInteger; 
typedef unsigned long NSUInteger; 
#else 
typedef int NSInteger; 
typedef unsigned int NSUInteger; 
#endif 
+2

To jest poprawne. Być może jedna z rzeczy, które użytkownicy przechodzą z platformy wszystkich obiektów, jest najbardziej zagmatwana. –

+1

Dziękuję bardzo za szybką odpowiedź. To sprawiło, że twoje załamanie pomogło mi zrozumieć "dlaczego" znacznie szybciej! – Eric

+0

@Eric Jesteś bardzo mile widziany. Do tego właśnie służy StackOverflow! :) –

Powiązane problemy