2010-08-24 25 views
101

Próbuję wyodrębnić ciąg (który zawiera liczbę całkowitą) z tablicy, a następnie użyć go jako int w funkcji. Próbuję przekonwertować go na int używając intValue.ObjectiveC Parse Integer from String

Oto kod, który próbowałem.

NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"]; 
    [_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]]; 

otrzymuję ten błąd:

passing argument 3 of 'loggedIn:::' makes pointer from integer without a cast

Co się stało?

+2

Jak loggedin ::: deklaruje? szczególnie jakiego rodzaju trzeciego parametru oczekuje? – Vladimir

+2

Z ciekawości, z jakiego języka pochodzisz? Widziałem wiele osób zadawających pytania na temat SO na temat SO, w których wykonano wywołania metod, które wyglądają jak twoja metoda 'loggedIn :::', która jest zdecydowanie nieobiektywnym sposobem na robienie rzeczy. – kubi

+0

@kubi: to Obj-C, metoda z argumentami bez nazw. – beefon

Odpowiedz

241

ja naprawdę nie wiem, co było tak ciężko o tym mowa, ale udało mi się zrobić to w ten sposób:

[myStringContainingInt intValue];

należy zauważyć, że można też zrobić:

myStringContainingInt.intValue;

+2

Po prostu dla nas noobów pochodzących z innych języków, "[myStringContainingInt intValue];" może również być napisany jak 'myStringContainingInt.intValue;' – ToddBFisher

+5

Co dzieje się, gdy liczba wewnątrz 'myStringContainingInt' jest zbyt duża, aby zmieściła się wewnątrz 32 bitów-- faktycznie 31 bitów od momentu podpisania? –

+0

Powinieneś używać longValue w tym przypadku – dulgan

0

Zasadniczo trzeci parametr w loggedIn nie powinien być liczbą całkowitą, powinien to być obiekt jakiegoś rodzaju, ale nie możemy na pewno wiedzieć, ponieważ nie nazwaliśmy parametrów w wywołaniu metody. Podaj sygnaturę metody, abyśmy mogli zobaczyć na pewno. Być może zajmuje to NSNumber lub coś podobnego.

+1

Nie musi to być obiekt. Mógłby błędnie uznać metodę za "int *" - w rzeczywistości wydaje mi się to dość prawdopodobne, ponieważ wielu ludzi, którzy piszą Objective-C bez poznawania podstaw C, zakłada, że ​​typy parametrów zawierają po prostu gwiazdy jako część ich składni. – Chuck

+0

Tak, nie myślałem o tym. To dobra możliwość. –

+0

Trwa int *. czy to jest nieprawidłowe? –

1
NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"]; 

_returnedArguments jest tablicą NSStrings której właściwość UITextField text oczekuje. Nie trzeba konwertować.

błąd

Składnia:

[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]]; 

Jeśli _appDelegate ma właściwość passwordField, to można ustawić tekst przy użyciu następujących

[[_appDelegate passwordField] setText:[_returnedArguments objectAtIndex:2]]; 
+0

Myślę, że zostałeś radykalnie odrzucony przez dziwną nazwę metody i niezręcznie napisaną inwokację. Właściwość nie "oczekuje ciągu" (cokolwiek to oznacza) - "passwordField.text" jest drugim argumentem metody 'loggedIn :::' i '[[_returnedArguments objectAtIndex: 2] intValue]' jest trzecim argumentem. Nic nie przechodzi na własność. – Chuck

+0

i deklaruję nazwę metody jako błąd .. wywnioskowanie, co kod próbuje zrobić ... – falconcreek

-1

Jeśli ja zrozumiałem, trzeba konwertować NSString do int? Spróbuj tego spokoju kodu:

NSString *stringWithNumberInside = [_returnedArguments objectAtIndex:2]; 
int number; 
sscanf([stringWithNumberInside UTF8String], "%x", &flags); 
+4

NSString ma metodę 'intValue'. http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/intValue – Chuck

+0

Pardon, masz rację. – beefon

7

można po prostu przekonwertować ciąg takiego [str intValue] lub [str integerValue]

integerValue Powoduje zwrócenie wartości NSInteger w tekście odbiorcy.

  • (NSInteger) integerValue Return Value Wartość NSInteger tekstu odbiorcy, zakładając reprezentację dziesiętną i pomijając spacje na początku łańcucha. Zwraca 0, jeśli odbiornik nie rozpoczyna się od prawidłowej dziesiętnej reprezentacji tekstowej liczby.

Więcej informacji można znaleźć here

+3

Odpowiadasz na to pytanie po tym, jak wiele odpowiedzi na to samo już tu jest? –

+5

Żartujesz sobie ze mnie? Co jeśli łańcuch ma wartość "0"? Czy jest to błąd czy poprawna analiza? Coś smutnego, że Apple nie znosi wyjątków, ponieważ jest to dokładnie miejsce, w którym ich potrzebujesz. – phreakhead

Powiązane problemy